关于int *p[n]和int (*p)[n]的一点理解

因为搜到的讲解都是纯文字,感觉不太形象不太好理解,所以自己测试代码了之后画了图做一点记录,如果有什么有问题的或理解的不到位的地方,之后再做修改。

参考文章:https://blog.csdn.net/weixin_33928467/article/details/91541400

一、int *p[n]

这个比较好理解,我比较习惯 int* p[n] 这样写,显然这是一个指针数组,有n个元素,每个元素是一个 int* 型指针。在这里插入图片描述
在这里插入图片描述
指针数组中的每个元素可以单独申请不同大小的内存空间,且相邻两个元素所指向的内存空间地址不连续。

二、int (*p)[n]

这个我弄得不是很懂,按照参考文章所述:int (*p)[n]也是一个n维数组,但是这个数组的首地址是 *p,也就是说,p指向的内容,是一个数组的首地址。
在这里插入图片描述
在这里插入图片描述

由上图可知,x[0]、x[1]、x[2]等同于(*q)[0]、(*q)[1]、(*q)[2],x和&x是等价的,x和 *q也是等价的,以 *q进行偏移跟x进行偏移结果是一样的。

但是有个地方不太理解,为何 *q和q的值是相等的,而且通过q进行偏移,每个元素会多8个字节?

2020/7/6补充:&x表示一个指向大小为3数组的指针,那么&x+1就是表示一个指向大小为3的下一个数组的指针,即移动了3*4=12个字节,跟移动一个元素相比多了8个字节,这里的q应该就相当于&x,所以以q进行偏移会多8个字节。
参考文章:https://blog.csdn.net/zb121121/article/details/91349014

猜你喜欢

转载自blog.csdn.net/qq_45523399/article/details/107074099
今日推荐