今天看到一段代码就很疑惑。请看:
int (*p)[5] = (int (*)[5])malloc(sizeof(int) * 5);
for(int i = 0; i < 5; i++)
{
*(*p + i) = i;
}
for(int i = 0; i < 5; i++)
{
printf("%d\t", (*p)[i]);
}
我看到这段代码很奇怪,因为我觉得这里应该是使用p的,p本来就是malloc内存的首地址,为什么还要加上一个寻址符号呢?
这让我对我一开始建立起来的指针模型产生了怀疑。于是我又在程序里面将这个p的值以及*p的值以16进制的形式打印了出来。
我发现他们的值实际上是一样的。
然后我又再gdb里面查看了他们的数据类型。然而我发现虽然他们是同样的一个值。但是p和*p的数据类型是不同的,请看:
所以这应该是数组指针的锅,所以得出的结论就是如果要通过数组指针访问数组元素的话,应该要使用取值符号将数组指针转换成为数组???
同时的话,还有一点要注意的就是实际上声明(定义)的数组,他们的变量(指针)是一个常量,是不能被改变的 。
其实也直接可以通过数组的首地址指针来访问数组。
好吧,其实我还是希望能够得到一个合格合理的解释。
求教。