C語言 extern 經常出錯的一處

2021-07-09 22:15:54 字數 526 閱讀 1842

在乙個

原始檔裡定義了乙個

陣列: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 請問,這樣可以嗎?答...