防火保温板厂家
免费服务热线

Free service

hotline

010-00000000
防火保温板厂家
热门搜索:
行业资讯
当前位置:首页 > 行业资讯

单片机C语言指针的指针

发布时间:2020-07-21 17:38:17 阅读: 来源:防火保温板厂家

指针的指针

一个指针变量内部可以存储一个值,这个值是另外一个对象的地址,所以我们说一个指针变量可以指向一个普通变量,同样这个指针变量也有一个地址,也就是 说有一个东西可以指向这个指针变量,然后再通过这个指针变量指向这个对象。那么如何来指向这个指针变量呢?由于指针变量本身已经是一个指针了(右值),那 么我们这里就不能用一般的指针了,需要在指针上体现出来这些特点,我们需要定义指针的指针(二重指针)。

int *p1=i;

int**p2=p1;

综合以上的所有点,下面是我们常常看到一些匹配(也是经常出错的地方):

int a[3],b[2][3],c,*d[3];void fun1(int *p);void fun2(int (*p)[3]);void fun3(int **p);void fun4(int p[3]);void fun5(int p[]);void fun6(int p[2][3]);void fun7(int (p)[3]);函数 不会产生编译时刻的可能值(但逻辑上不一定都对)--这里我觉得应该是有效的值

为什么可以有这样的搭配,原因如下:

对于fun1 fun4 fun 5: 在编译器看来fun1,fun4,fun5的声明是一样,在编译时候,编译器把数组的大小舍去不考虑,只考虑它是一个指针,也就是说有没有大小说明是一样的,所以三者的形式都是fun1的形式(其实只要提供了int*指针就可以了);

对于fun7 :以上的解释对于引用是不适用的,如果变量被声明为数组的引用,那么编译器就要考虑数组的大小了,那么必须和声明一模一样(所以fun7就只有a合适);

对于fun2:p是一个指向一个含有3个元素的数组,这样b和b+i正好合适,而a却不是(它是指向a[0]的,不是指向这个数组的);

对于fun3:p是一个指针的指针,而d指向d[0],同时d[0]又是一个指针,所以d就是一个指针的指针。但是b却不是(它是一个2*3的矩阵也就是年int [2][3]类型);

对于fun6,p是一个2*3的数组类型,和b恰好完全匹配

c语言相关文章:c语言教程

单片机相关文章:单片机教程

单片机相关文章:单片机视频教程

单片机相关文章:单片机工作原理

沈阳双眼皮修复

郑州牙齿矫正

合肥隆鼻

南京双眼皮修复