课程名称: 物联网/嵌入式工程师
课程章节: 第二周 计算机基础和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]);
}
每日一句:
去接受一些你不了解的东西,去争取,去相信自己可以改变一些事情。
——《一个人的朝经》
热门评论
老哥,感觉课程怎么样