将多维arra的地址复制到指针时的指针尺寸

时间:2015-12-03 03:09:41

标签: c++ c pointers multidimensional-array

当我们有一个多维数组时,我们希望使用指针指向其地址。在一本书中,它说我们会做如下。

#include <stdio.h>
int main(){
    int a[3][4][5];
    int *p[5];
    p = a;
    return 0;
}

现在,我对以下几点感到困惑:

  1. 当我将代码输入CLion时,会发出警告:Incompatible pointer types 'int[5] *' and 'int[3][4][5]',为什么会这样?
  2. 为什么指针数组*p包含5个变量而不是3个变量?
  3. 如何使用此指针*p
  4. 感谢。

1 个答案:

答案 0 :(得分:1)

1)因为......它们是不同的指针类型! ;)具体来说,a是一个三维整数数组,而p是一个指向整数的一维数组。了解? a包含整数,p包含指向整数的指针。

2)因为行int *p[5];声明它长5。在C中,您可以使用[]中的数字来定义数组的大小。

3)好吧,如果你想让p指向a,你需要让它的某些部分指向a,例如p[0] = a;