2013-11-05 177 views
1

我發現了一個令人費解的陣列,當我試圖把括號強調指針數組的聲明中(int *) ptr[N];C中的聲明'(int *)ptr [N]'是什麼意思?

GCC的C編譯器說:

error: ptr undeclared (first use in this function)

誰能解釋錯誤的由來嗎?

+0

:[Clockwize /螺旋規則(http://c-faq.com/decl/spiral.anderson.html)和[CDECL; C Gibberish <->英文](http://cdecl.org/) – damienfrancois

回答

3

這很簡單:變量ptr尚未宣佈。不,(int *) ptr[N];的聲明,它是一個數組下標表達式的類型轉換。

如果你想要一個指針數組,你應該做的

int *ptr[N]; 
2

這是鑄造ñ陣列ptr的第i個元素爲整數的指針。

本身指向一個ptr該錯誤是從未宣佈過。你忘了或刪除我的misstake這樣一行:

int *ptr[123]; 

有關N這似乎是它通常例如定義一個constand像這樣:

#define N 42 
1

也許你可以做到這一點

typedefine int* INT_PTR; 
INT_PTR ptr[N]; 
1

我覺得編譯器會投PTR [N]輸入(INT *),就像

int a; 
    double b; 
    b = (double)a; 

所以(int *)ptr [N] dosen已經留下了值,並且你從未聲明過ptr。 然後gcc編譯器會告訴你未聲明的。雖然無助於你的具體問題,這兩個引用可能來方便以後對類似的問題