一、引入
实验手册:告诉学生去哪个柜子拿、放东西
1.从2号柜子取出里面的东西
2.放入3号柜子
3.如果3号柜子的东西数量超过10,取出1个,放到5号试管
4.如果3号柜子的东西数量超过10,继续执行步骤3
二、程序就是告诉CPU去读、写某些地址
volatile char b[10] = "abc";
volatile char *p;
p = b;
b就是首地址,0到9分别对应10个柜子
char是一种数据类型就像int,float之类 ,其中**char ***其实也是一种数据类型无非就是定义的地址,无论是int *还是char *都是32位(二进制)的,也就是4byte。
三、地址的地址是什么?
&是取地址的符号,p是char类型的指针,肯定有对应的地址来保存这个指针那就是&p,也就是p的地址,即地址的地址,
四、怎么访问后面的地址的数据?
到底是不是上面那样呢?
x指针的运算单位是sizeof(x)
地址移动的位数是由指针类型确定的,这是内部定义好的,记住即可,方便我们使用。
四、总程序
#include <stdio.h>
int mymain(void)
{
volatile char b[10] = "abc";
volatile char *p;
p = b;
printf("&p = 0x%x\n\r", &p);
printf("p = 0x%x\n\r", p);
printf("b = 0x%x\n\r", b);
p[0] = 'A';
printf("b[0] = %c\n\r", b[0]);
printf("p[0] = %c\n\r", p[0]);
volatile int c[3] = {0x100, 0x200, 0x300};
volatile int *p2;
printf("before:\n\r");
printf("c[0] = 0x%x\n\r", c[0]);
printf("c[1] = 0x%x\n\r", c[1]);
printf("c[2] = 0x%x\n\r", c[2]);
p2 = c;
p2[1] = 0x12345678;
*(p2 + 2) = 0xffffffff;
printf("after:\n\r");
printf("c[0] = 0x%x\n\r", c[0]);
printf("c[1] = 0x%x\n\r", c[1]);
printf("c[2] = 0x%x\n\r", c[2]);
return 0;
}
本代码可以使用keil5软件进行debug调试
最后,感谢韦神(韦东山)!