2.C语言指针的赋值 int *p;*p=0x2000; //错误的赋值,会导致程序崩溃或者跑飞 p=0x2000; //正确的赋值
为什么经过改写后的程序就可以对*p赋值了呢?这里就需要理解*号在指针的定义和指针操作上的区别。 类似现实生活中每个人都有居住空间和居住空间的地址,xx省xx市xx区xx街道xx小区xx楼xx单元xx号。指针p代表的是地址xx省xx市xx区xx街道xx小区xx楼xx单元xx号;*p代表的是地址xx省xx市xx区xx街道xx小区xx楼xx单元xx号所对应的房屋空间,地址是不能住人的,但地址对应的房屋空间是可以住人的。

来一段程序练习一下: 假设有两个整型变量a和b,对应的地址分别是0x2000和0x3000,定义一个指针p,通过指针的方式,将变量a的值改成10,将变量b的值改成20, 如下图示,

int *p;p=0x2000;// 第一步,将指针变量赋值成变量a的地址,指针p就指向了变量a*p=10; // 第二步,对指针所指向的地址空间(就是变量a空间)进行赋值p=0x3000; // 第三步,将指针变量赋值成b的地址,指针p就指向了变量b*p=20; // 第四步,对指针所指向的地址空间(就是变量b空间)进行赋值
[size=normal]第二步

[size=normal]第四步

到这里就完成了通过指针p对变量a和b的值/内容改写。因为嵌入式底层驱动最常用就是对MCU、单片机的寄存器进行读写操作,而MCU、单片机的寄存器就是固定的地址,通过指针能够对地址直接读写操作,简单又效率高的特性,就是为什么嵌入式底层驱动都是C语言编程的主要原因,简直就是嵌入式底层驱动的设计的利器。
|