2015-12-03 42 views
0

当我们有一个多维数组时,我们希望使用指针来指向它的地址。在一本书中,它表示我们将按照以下方式进行操作。将多维阵列的地址复制到指针时的指针尺寸

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

现在,我安静的困惑有以下几点:

  1. 当我键入的代码转换成克利翁,它给出了一个警告:Incompatible pointer types 'int[5] *' and 'int[3][4][5]',为什么呢?
  2. 为什么指针数组*p包含5个变量而不是3个变量?
  3. 如何使用这个指针*p

谢谢。

+0

'P = A;'是非法的代码。你的编译器告诉你这一点。无论如何,编译器生成的任何可执行文件的输出都是未定义的。 –

+0

'p'是一个数组,它不可能分配给一个数组。您只能分配给数组的各个成员(当这些数组本身不是数组时) –

回答

1

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

2)由于线int *p[5];声明它是5长。在C中,你可以通过[]中的数字来定义数组的大小。

3)好吧,如果你想p来指向你需要使它指向的某个部分的,作为一个例子p[0] = a;