课程名称: 物联网/嵌入式工程师
课程章节: 第二周 计算机基础和C语言
主讲老师: 大白老师
今天主要学习了多级指针的使用
多级指针就是指针的指针…,实际上也没那么复杂,比较简单。
以常用的二级指针为例
二级指针类型实际上是(一级)指针变量的地址。
以二级指针为例:
定义方式 如下: 数据类型 ** 变量名; int a = 10; int *p = &a; int **q = &p; --------------------------------------------- p = &a; //*p = *(&a) *p <===> a q = &p; //*q = *(&p) ===> *q = p; **q <===> *p<===>a
在32bit的系统中,所有的指针变量都是4bytes,多级指针(二级和二级以上)在移动的每次移动都是4bytes. 因为一个指针大小是4bytes。
int *p = NULL; char **p_char = (char **)&p; short **p_short = (short **)&p; int **p_int = (int **)&p; printf("sizeof(p_char) = %d\n",sizeof(p_char)); printf("sizeof(p_short) = %d\n",sizeof(p_short)); printf("sizeof(p_int) = %d\n",sizeof(p_int)); return 0; ------------------------------------------------、 结果:sizeof(p_char) = 4 sizeof(p_short) = 4 sizeof(p_int) = 4
下面说一下数组:
int a[5] = {10,20,30,40,50}; int *p = a; int **q = &p; //q <===>&p *q <===>*(&p) *q<===>p 而根据一维数组得出结论: a[i] <===>*(a + i)<===>*(p + i)<===>p[i] 且 *q<===>p,故 *(p + i)<===>p[i]<===>*(*q + i) <===>(*q)[i]
其实理解了之前一级指针的本质,二级也不算难。都是同样的。
// int a[5]; // int *p = a; // int **q = &p; //q = &p *q<===>*(&p)<====>p //结论: a[i]<===>*(a + i)<===>*(p + i)<===>p[i]<====>*(*q + i)<===>(*q)[i] // int main() { int a[5] = {10,11,12,13,14}; int *p = a; int **q = &p; //q = &p; *q<===>*(&p)<===>p //a[3] = 13 printf("a[3] = %d\n",a[3]); printf("*(a + 3) = %d\n",*(a + 3)); printf("*(p + 3) = %d\n",*(p + 3)); printf("p[3] = %d\n",p[3]); printf("==========================\n"); //a[3] printf("*(*q + 3) = %d\n",*(*q + 3)); printf("(*q)[3] = %d\n",(*q)[3]); ———————————————————————————————————————————— 结果:a[3] = 13 *(a + 3) = 13 *(p + 3) = 13 p[3] = 13 ========================== *(*q + 3) = 13 (*q)[3] = 13
就是这样
课后作业
答案:
p=a; q=&p; for(i=0;i<5;i++) { printf("%d\n",p[i]); printf("%d\n",*q[i]); }
去接受一些你不了解的东西,去争取,去相信自己可以改变一些事情。
——《一个人的朝经》