返回信息流我有点疑问想问问大家,我花了很久来理解指针,数组,并且想通过打印来验证我对数组,指针的理解。可是由于printf输出可以输出内容的格式,不指定的话又不能输出;cout重载了指针的输出方法,所以输出和自己想的不怎么一样。看书看资料,感觉我理解的也没有差错,我想说一下我的理解,然后大家看对不对。
如果只是定义一个数组int* p[2];那么拍p[0]的地址就是p的地址。所以*p就是p[0];
如果定义了一个二维数组:int *p[2][2];那么p[0]就是一个指针,这个指针的地址是p[0][0]的地址,而p也是一个指针,指向的地址是p[0]的地址。也就是说:p[0][0]就是*p[0]也就是**p;
指针数组的话,比如:char* p[]={"aaa","bbb","ccc"};p是一个指针,这个指针指向的地址是"aaa"首字母的地址。也就是说,"aaa"就是**p,也是*p[0];
至于cout出什么,因为有重载,所以打印出来的东西要仔细了解cout之后还能学到哦啊。
这是一条镜像帖。来源:北邮人论坛 / cpp / #96615同步于 2017/10/23
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
【问题】C/C++指针和数组的一点问题
zhaotongxue
2017/10/23镜像同步11 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
int *p[2],这是一个数组,数组元素是int类型的指针。p[0]就是第一个元素,而不是什么p的地址,只不过p[0]存的是某个int的地址。p在不加[]运算符的时候,退化成数组的起始地址,也就是p[0]的地址
【 在 liuyehcf 的大作中提到: 】
: int *p[2],这是一个数组,数组元素是int类型的指针。p[0]就是第一个元素,而不是什么p的地址,只不过p[0]存的是某个int的地址。p在不加[]运算符的时候,退化成数组的起始地址,也就是p[0]的地址
这个没问题。我想知道的是,是不是int* p[1][1]这个二维指针数组,p和p[0]一样,存储的都是指向p[0][0]的地址
【 在 zhaotongxue 的大作中提到: 】
:
: 这个没问题。我想知道的是,是不是int* p[1][1]这个二维指针数组,p和p[0]一样,存储的都是指向p[0][0]的地址
按照你的意思
P和P[0]作为指针指向不同
前者指向的是整个数组 后者指向一个一维数组也就是二维数组里第一个元素
p是p[0]的地址,p[0]是p[0][0]的地址
【 在 zhaotongxue 的大作中提到: 】
:
: 这个没问题。我想知道的是,是不是int* p[1][1]这个二维指针数组,p和p[0]一样,存储的都是指向p[0][0]的地址
不是的,他们的量纲不同的,比如int*p[3][4]这里说的p代表行元素p[0]的地址(看成中只有三行的一维数组),p+1 代表p[1]的地址;而p[0]是p[0][0]的地址,他们的维度不同,
不是的,他们的量纲不同的,比如int*p[3][4]这里说的p代表行元素p[0]的地址(看成中只有三行的一维数组),p+1 代表p[1]的地址;而p[0]是p[0][0]的地址,他们的维度不同,