c語言學習之五 宣告

2021-05-22 03:16:56 字數 1958 閱讀 4713

1.宣告的構成

宣告的核心是:宣告器(declarator),所謂declarator,就是識別符號及與它組合在一起的指標、函式括號和陣列下標等,如下圖所示:

數量c語言中的名字

c語言中的表現形式

零個或多個

指標*const volatile   *volatile   *  *const   *volatile const

有且只有乙個

直接宣告器

識別符號、識別符號(引數)、識別符號[下標]、(識別符號)

零個或乙個

初始化= 初始值

乙個完整的宣告由下表中的各個部分組成:

數量c語言中的名字

c語言中的表現形式

至少乙個型別說明符

型別說明符

儲存型別

型別限定型別

void char short int long signed

unsigned float double

結構說明符

列舉說明符

聯合說明符

extern static register

auto typedef

const volatile

有且只有乙個

直接宣告器

參見上面的定義

零個或多個

更多宣告器

,宣告器

乙個分號;

2.理解c語言的優先順序規則

優先順序規則:

a. 宣告從它的優先順序規則開始,然後按照順序依次讀取;

b. 優先順序從高到低依次是:

b.1 宣告中被插號括起來的那部分

b.2 字尾操作符:括號()表示這是乙個函式,而表示這是乙個陣列

b.3 字首操作符:星號*表示「指向…的指標」

c. 如果const和(或)volatile關鍵字的後面緊跟著型別說明符(如int, long),那麼它作用於型別說明符;在其它情況下,它作用於它左邊緊鄰的星號。

下面是對優先順序規則的一種解釋

步驟號如果閱讀

1.取最左邊的識別符號

表示「識別符號是」

2.檢視識別符號右邊的的下乙個符號,如果是方括號

對於每一對,表示「…的陣列」

3.如果是乙個左括號

到右括號為止的內容,表示「返回…的函式」

4.如果左邊的符號是乙個左括號

這個左括號把已經宣告的內容組合在一起,直到遇見對應的右括號,然後從第2步重新開始

5.如果左邊的符號是下述之一:const、volatile、*

繼續向左邊讀符號,直到不是那3個符號為止。如果符號是const,表示「唯讀」;如果是volatile,表示「volatile」;如果是*,表示」指向…的指標」。然後重複從第4步。

6.剩下的符號形成宣告的基本型別

剩餘的符號可一起閱讀

舉例說明如下:

char *(* c[10])(int **p);

剩餘的宣告

步驟結果

char *(* [10])(int **p)

第1步識別符號是c

char *(* )(int **p)

第2步表示 c是乙個含有10個元素的陣列,元素型別是…

char *()(int **p)

第5步表示 c是乙個含有10個元素的陣列,其元素型別是指向…的指標

char * (int **p)

第4步表示 c是乙個含有10個元素的陣列,其元素型別是指向…的指標

char *

第3步表示 c是乙個含有10個元素的陣列,其元素型別是指向函式的指標,這個函式接收乙個指標的指標作為引數

char

第5步表示 c是乙個含有10個元素的陣列,其元素型別是指向函式的指標,這個函式接收乙個指標的指標作為引數,返回乙個指向…的指標

第6步表示 c是乙個含有10個元素的陣列,其元素型別是指向函式的指標,這個函式接收乙個指標的指標作為引數,返回乙個指向字元的指標

五 c語言學習

整型 int 整數,絕大數機器上佔4個位元組,tc環境中是2個位元組。單精度實型float 單精度浮點數,一般4個位元組。雙精度實型double 8個位元組。長整型long long int 4個位元組。短整型short short int 2個位元組。無符號整型unsigned int 2個位元組...

c語言學習筆記五

gdb除錯工具 sudo su 切換到root使用者 mkdir 新建程式檔案目錄tc cat test.c 新建檔案 直接編寫程式 示例 如下 include int add range int low,int high int main void 編譯gcc g o test test.c 使用...

C語言學習 五 函式

1 函式由返回值,函式名,引數,作用域 組成 2 返回值 1 無返回值時,必須用void修飾 2 有返回值時,用返回資料型別修飾,並且函式內部有return return返回引數,並結束函式 return引數可以使常量,變數,表示式 注意型別匹配 3 函式名 1 命名規則和變數相同 4 引數 1 形...