2015-12-03 64 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;