数组指针以数组 2019-03-29 晚

2019-03-29  本文已影响0人  覃舒服

今天看到一段代码就很疑惑。请看:

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进制的形式打印了出来。


20190329225906.png

我发现他们的值实际上是一样的。

然后我又再gdb里面查看了他们的数据类型。然而我发现虽然他们是同样的一个值。但是p和*p的数据类型是不同的,请看:


20190329230419.png

所以这应该是数组指针的锅,所以得出的结论就是如果要通过数组指针访问数组元素的话,应该要使用取值符号将数组指针转换成为数组???

同时的话,还有一点要注意的就是实际上声明(定义)的数组,他们的变量(指针)是一个常量,是不能被改变的 。

其实也直接可以通过数组的首地址指针来访问数组。

好吧,其实我还是希望能够得到一个合格合理的解释。

求教。

上一篇 下一篇

猜你喜欢

热点阅读