继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

【学习打卡】第12天 物联网/嵌入式工程师 第二周

昆汀
关注TA
已关注
手记 19
粉丝 8
获赞 12

课程名称: 物联网/嵌入式工程师

课程章节: 第二周 计算机基础和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]);
}

每日一句:

去接受一些你不了解的东西,去争取,去相信自己可以改变一些事情。
——《一个人的朝经》

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP

热门评论

老哥,感觉课程怎么样

查看全部评论