博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单片机c语言的指针,单片机C语言指针的指针
阅读量:6377 次
发布时间:2019-06-23

本文共 888 字,大约阅读时间需要 2 分钟。

指针的指针

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

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]);

函数 不会产生编译时刻的可能值(但逻辑上不一定都对)--这里我觉得应该是有效的值

2f6992844320bddee2f392b1b47f3f11.png

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

对于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恰好完全匹配

转载地址:http://bhvqa.baihongyu.com/

你可能感兴趣的文章
html,css,javascript三者之间的相互关系是什么
查看>>
Educational Codeforces Round 48 (Rated for Div. 2) B 1016B Segment Occurrences (前缀和)
查看>>
SQL SERVER 2005 附加 SQL SERVER 2000数据库的办法
查看>>
echart折线图系列一:折线图基本配置
查看>>
leetcode 278. First Bad Version
查看>>
mlecms v2.2版权
查看>>
异步请求(解析json数据)
查看>>
HDU - 6409:没有兄弟的舞会(数学+思维)
查看>>
(六)6.9 Neurons Networks softmax regression
查看>>
关于快乐数的算法
查看>>
day11-RabbitMQ direct广播模式
查看>>
vue笔记三(组件)
查看>>
9月9日,We7插件商场正式上线
查看>>
WPF and Silverlight 学习笔记(五):WPF应用程序管理
查看>>
VC6.0将程序打包成一个可执行文件(release)
查看>>
如何根据条件隐藏列
查看>>
es6中新增的常用数值扩展
查看>>
centos,nginx安装备忘
查看>>
GCD使用经验与技巧浅谈
查看>>
Elasticsearch 统计代码例子
查看>>