在乙個
原始檔裡定義了乙個
陣列:char a[6];
在另外乙個檔案裡用下列語句進行了宣告:extern char *a;
請問,這樣可以嗎?
答案與分析:
1)、不可以,程式執行時會告訴你非法訪問。原因在於,指向型別t的
指標並不等價於型別t的陣列。extern char *a宣告的是乙個指標變數而不是字元陣列,因此與實際的定義不同,從而造成執行時非法訪問。應該將宣告改為extern char a[ ]。
2)、例子分析如下,如果a = "abcd",則外部變數a=0x12345678 (
陣列的起始位址),而*a是重新定義了乙個
指標變數,a的位址可能是0x87654321,直接使用*a是錯誤的.
3)、這提示我們,在使用extern時候要嚴格對應宣告時的格式,在實際程式設計中,這樣的錯誤屢見不鮮。
4)、extern用在變數宣告中常常有這樣乙個作用:你要在*.c檔案中引用另乙個檔案中的乙個全域性的變數,那就應該放在*.h中用extern來宣告這個全域性變數。
C語言中的extern
在c語言中,修飾符extern用在變數或者函式的宣告前,用來說明 此變數 函式是在別處定義的,要在此處引用 1.extern修飾變數的宣告。舉例來說,如果檔案a.c需要引用b.c中變數int v,就可以在a.c中宣告extern int v,然後就可以引用變數v。這裡需要注意的是,被引用的變數v的鏈...
C語言extern的用法
利用關鍵字extern,可以在乙個檔案中引用另乙個檔案中定義的變數或者函式,下面就結合具體的例項,分類說明一下。一 引用同乙個檔案中的變數 include int func int main int num 3 int func 如果按照這個順序,變數 num在main函式的後邊進行宣告和初始化的話...
C語言中的extern
extern可以置於變數或者函式前,以表示變數或者函式的定義在別的檔案中,提示編譯器遇到此變數和函式時在其他模組中尋找其定義。另外,extern也可用來進行鏈結指定。在乙個原始檔裡定義了乙個陣列 char a 6 在另外乙個檔案裡用下列語句進行了宣告 extern char a 請問,這樣可以嗎?答...