嵌入式学习心得
青春只有走出来的精彩,没有等待出来的辉煌! ——题记
学习嵌入式已经三个月了,当初也是因为之前公司嵌入式开发工程师的影响,让我了解到了嵌入式,然后在他天天的熏陶之下,让我慢慢的的对嵌入式有了想法,来华清也是在他的介绍之下进入的,当初我对这些完全都是处于懵逼状态,连有哪些学校都不知道,只知道有千峰和黑马,知道千峰也是因为有同学在里面学习前端,然后对其他的就都不清楚了。
在他的引导下,我自学了一些51方面的知识,当初自学点亮第一个LED灯的时候,内心开心无比,满满的成就感,然后也就是这样,让我慢慢的对这个方面产生了兴趣,也觉得是时候做出一些抉择和改变了,不能再像以前一样,温水煮青蛙的日子固然是索然无味的,趁着年轻努力一把,改变命运。
想想当初才进来学习的时候,对c语言都不咋懂,只是知道一些数据类型的使用,例如int,char,float等一些基础的c知识,每次上课能听懂,但是下来之后自己写的话又写不对,有的甚至写不出来,很恼火,感觉懂就是写的时候又写不出来,学这方面的知识思维很重要,所以首先要转变思维,不能像以前那样去思考这些问题,要有编程的思想,并且不能心急,要有一个循序渐进的过程,一步一步的学扎实,才开始不能好高骛远,需要把每天讲解的知识点弄清楚,刚好我们华清的老师都很负责,讲解的都很仔细,都是从基础讲起,这就很适合我们这种小白学习。
在华请学习真的是一个很正确的决定,因为这边的老师都很认真负责,每个阶段的技术老师都有自己的教学风格,每次上课都会询问同学们听课的情况,害怕我们会不适应老师的教学风格,然后都会说如果不适应他们就改变一下,尽最大努力让我们能够学懂跟上节奏,不放弃任何一个学员,班主任也是非常的认真负责,时常会私下和我们沟通,询问我们的学习情况,问我们能不能跟上学习节奏,还给我们提一些学习建议和方法,反正华清给我的感觉就是挺靠谱的。
在C的学习中,可能就指针和函数难度大点了吧,开始也没弄明白,指针在64位操作系统中占八个字节,在32位操作系统中占4个字节,在指针中 "*" 表示的是取内容 ,"&" 表示取地址,这两个符号互为逆运算,当然在指针运算中,没有指针乘指针,指针加指针和指针除指针因为这些运算在指针运算中都是没有意义的,只有指针减指针。
指针的定义:<存储类型><数据类型>*指针变量;
指针的初始化:<存储类型><数据类型>*指针变量=地址量;
如:
int *p=NULL;
AI写代码
1.如下就是把已知变量的地址赋值给指针:
int a[32]={0};
int *p=a; //int *p=&a[0];
AI写代码
2.指针赋值给指针:
int a=12;
int *b=&a;
int *c=b;
AI写代码
在指针的使用中,一定要防止野指针的出现,所以再创建指针时可以将NULL先赋值给指针,这样就可以防止指针指向不明而出现的野指针。
如:
int *p=NULL;
AI写代码
指针的关系运算:== ; < ; > ; <= ; >= ; != ; 这些比较的都是指针指向地址的高低。
多级指针的定义:<存储类型><数据类型>**指针变量;
初始化:<存储类型><数据类型>**指针变量=指针地址量;
注意:多级指针不能跳着指,只能指向上一级(第二级指向第一级)。
如:
#include <stdio.h>
int main()
{
int a=12;
int *p=&a;
int **q=&p;
int ***n=&q;
int ****m=&n;
return 0;
}
AI写代码
const修饰指针:const 的位置不一样则修饰的效果也不一样。
1.int constp :const修饰的 '' ,p,则p不能被更改 。
2.int const p :const修饰的是p,则表示p 的指向不能被更改,但是p的内容可以改变。
3.const int p :const修饰的是p,表示*p的内容不能被改,但是p的指向可以改变。 4.const *int p :表示指针的指向不能改变。
5.const int * const p : const修饰p和*p,表示指针指向不能改变,并且内容也不能被改变。 在C语言中第二个难点就是指针和数组,指针和函数的结合如:数组指针,指针数组,函数指针,指针函数,函数指针数组;
1.数组指针:
数组指针:数组指针也称行指针,本质是一个指针,是指向数组的指针。
数组指针的定义:<储存类型><数据类型>(*指针变量)【表达式】
如:
int a[2][3]={1,2,3,4,5,6};
int (*p)[3]=a;
AI写代码
数组名a和指针变量p可以互换,【】和*可以互换。
2.指针数组(一维数组):
指针数组:本质是一个数组,但是这个数组里面储存的元素都是指针。
指针数组定义:<储存类型><数据类型>(*指针变量)
如:
int a[5]={1,2,3,4,5};
int *p[5]=a;
AI写代码
3.指针函数:
指针函数:本质是函数,只是该函数的返回值是一个地址。
能够返回的地址:
(1)全局变量的地址可以返回;
(2)实参的地址可以返回;
(3)malloc开辟的地址可以返回;
(4)static修饰的变量地址可以返回;
(5)字符串常量的地址可以返回;
指针函数的定义:<数据类型>*函数名(形参);
如:
int *func(int a,int b);
AI写代码
4.函数指针:
函数指针:本质是一个指针,其指向是该函数的接入口地址,要遵守指针的规则。
函数名:标识符。
用法:指向同类型的一系列函数。
函数指针定义:<数据类型>(*函数名)(形参);
如:
int (*func)(int a,int b);
AI写代码
5.函数指针数组:
函数指针数组:本质是数组,但是数组里面存放的是函数指针,函数指针指向的是函数入口地址。
函数指针数组定义:<数据类型>(*函数名【n】)(形参1,形参2);
如:
int (*p[2])(int add,int sub);
AI写代码
这个数组存放的是指向两个数据类型为整形的函数;
函数指针数组可以调用同类型的函数。
以上可以看出如果指针二字在后面则指针变量需要加括号,因为括号的优先级高,如数组指针:<储存类型><数据类型>(*指针变量);如函数指针:<数据类型>(*函数名)(形参)。
以上就是初识C语言的心得与一些难点的整理,望与君共勉,如有不同观点还请包含。
