體會c語言之宣告

2021-07-04 20:57:46 字數 1967 閱讀 7161

宣告在c

語言程式設計過程中起著核心的作用,通過宣告變數和函式,可以檢查程式潛在的錯誤以及把程式翻譯成目標**兩方面為編譯器提供至關重要的資訊。

在宣告變數和函式上有許多共同點。此外宣告還為儲存期限,作用域,以及連線提供重要的堅實的基礎。

宣告如何構成:

說明符  乙個或多個宣告表示式;

說明符 描述宣告變數和函式的性質。

說明符組成符分為三大類:

儲存型別: 分為四種 auto static extern register 

再宣告中最多可以出現一次儲存型別。 並且要放到最前面。

型別限定符: c89

中有 const 

和 volatile c99

中還有 

restrict 

宣告可以有多個限定符。

型別說明符:void char short int long signed unsigned float double。

函式說明符:在c99

中出現它只用於函式宣告,關鍵字為

inline。

型別限定符和型別說明符必須放到儲存型別的後面。

宣告表示式:

對於簡單的型別,宣告表示式列表就是被宣告的標示符列表,對於更為複雜型別,宣告表示式的每個條目實際是乙個表示式。

宣告表示式的構成:

指標: 一般有 * const volatile 

, * volatile ,*

,*const

,* volatile const 

構成。

直接宣告器: 識別符號, 識別符號【下標】, 識別符號(引數),(宣告器)……。

初始化內容: = 

初始值。

優先順序規則:

a 宣告從名字開始讀

b 按照優先順序從高到底

() 聚組

() 函式呼叫

【】下標引用     

* 間接訪問

c 如果

const 

或者 volatile 

關鍵字後面緊跟型別說明符,那麼它作用於型別說明符。在其他情況下

const 

和volatile 

作用於他左邊緊鄰的指標星號

分析宣告:

int *fp(  );  函式指標 指標中解釋

int (* f ) (  ); 與 

int * f[ ](  );

char * const  * (

* next【9

】)();

非法:int  f()()函式不能返回乙個函式                   可以用

int(

* f())()

int  f()

函式不能返回乙個陣列,因為函式必須返回標量值  

int 

(* f

())[  ];

int  f【】()陣列不能儲存函式 因為陣列元素必須相同的長度  

int 

(* f[ ]

)(  );

當計算機啟動時, 硬體將呼叫首位址為0

位置的子例程。

( *( void(* )()) 0 )( ) 

解釋   第一步:將0

進行強制型別轉化 (

void (* 

)())0

然後引用這個0

位置中的函式 (*(

void (* 

)())

0)() 就好像

fp是乙個函式指標  來引用

fp處的函式 (

*fp)()。

用 typedf 

能使表達更清晰,

typedef  void (* funcptr ) (  );

( *( funcptr )0)(  );

參考書籍  《c專家程式設計》 《c語言現代方法》。 本人只是一枚大一的學生,希望寫的不足的地方,或者有補充的地方,有大牛們指出,謝謝。 或者加qq討論 2110551525

C語言之宣告和定義

1 先說 宣告 和 定義 的區別 這裡的物件泛指函式 變數等 宣告 只是簡單地告訴編譯器在其他地方建立的物件的名字,允許你使用這個名字,並不分配記憶體空間,以extern關鍵字標識。定義 是一種特殊的宣告,它在宣告的同時告訴編譯器為物件分配記憶體空間。c語言的物件必須有且只有乙個定義,但可以有多個e...

非原 c語言之宣告和定義的區別

什麼是定義?什麼是宣告?它們有何區別?舉個例子 12 a inti b externinti 關於extern,後面解釋 哪個是定義?哪個是宣告?或者都是定義或者都是宣告?我所教過的學生幾乎沒有一人能回答上這個問題。這個十分重要的概念在大學裡從來沒有被提起過!什麼是定義 所謂的定義就是 編譯器 建立...

C語言之extern宣告辨析

1 基本解釋 extern可以置於變數或者函式前,以標示變數或者函式的定義在別的檔案中,提示編譯器遇到此變數和函式時在其他模組中尋找其定義。另外,extern也可用來進行鏈結指定。2 問題 extern 變數 在乙個原始檔裡定義了乙個陣列 char a 6 在另外乙個檔案裡用下列語句進行了宣告 ex...