前言 :
学习指针其实也是加深对C语言底层的理解,不单单是C语言表面的东西,如果理解背后底层的逻辑,使用起来会达到事半功倍的效果。为什么这么讲呢?因为指针和地址是分不开的,而C语言又是对内存进行了封装,如果理解了指针,理解了地址是不是会对底层更熟悉呢。
为什么要学习使用指针?
1、在数据传递时,如果数据块较大,这时就可以使用指针传递地址而不是实际数据,即提高传输速度,又节省大量内存;
2、字符串指针,是使用最方便,且常用的;
3、函数传参,分为值传递和地址传递。例如:变量互换值,正常值传递是不可以进行互换的,地址传递传参可以进行数据互换。
4、C语言中一些复杂的数据结构往往需要使用指针来构建,如链表、二叉树等。
5、bootloder难免会对地址进行一些操作,列如跳转,烧写等等。
指针:
C语言中指针变量其实跟普通变量没有任何区别,如int a,int*b 其中a和b都代表一个内存地址(假设int a 和int *b都是4个字节,地址为0x6000000),但是对这个内存地址的解析方法不同,a是int型的,会按照int的规定去解析(0x6000000开头的4个字节中存储了一个数据),int *b是int*型的,会按照int*的规定去解析(0x6000000开头的4个字节中存储了一个地址,这个地址所代表的内存单元中存放的是一个int类型数据)。
再来了解什么是地址:
C语言地址,是指内存地址的概念。计算机内存中的各个存储单元都是有序的,按字节编码。
用变量名来访问内存。据一个例子,例如:有一个flash大小为10Byte地址为0x600000-0x600009。
#pragma section("seg_btbuf") //这行代码是将变量n写入到0x600000这个地址
uint8_t n;
上述代码意思是在0x600000定义了一个变量n,那么上述说C语言也是对内存进行了封装是什么意思呢,其实变量n也是0x600000,相当于变量n是0x600000这个地址的别名,C语言对其进行了封装并进行了绑定。
待续。。。。。。。。。。。。。。。。。。。。