娓娓道來c指標 4 解析c的宣告語句

2021-06-22 21:50:29 字數 1876 閱讀 8401

(4)解析c的宣告語句

在繼續探索c指標之前,有必要來解析下c語言中複雜的宣告語法。

只需要記住兩則:乙個原則,乙個規則。

原則:先看標示符。

規則:運算子優先順序是規則。

舉例說明

1.最簡單的 int array[3];

結論:array是陣列,陣列規模是3,元素型別是int。

解析過程:先看標示符:array,只有乙個運算子,那麼array就是陣列,元素型別是int,完了。

2.難一點的

(1)陣列指標 int(*array)[3];

結論:array是一指標,指向一陣列,陣列規模是3,陣列中元素型別int。

解析過程:先看標示符:array,由於使用了括號運算子,只能先解析(*array):說明array是一指標。解析完了的,就可拋棄,那麼只剩下,說明指標指向的是一陣列,剩下的不解釋了。

(2)指標陣列 int *array[3];

結論:array是一陣列,陣列規模是3,陣列中元素型別是int*。

解析過程:先看標示符:array,由於優先順序高於*,故array先與結合:說明array是一陣列。只剩下乙個*,說明陣列中存放的是指標,指標指向的型別是int,也就是說陣列中存放的元素型別是int*。

看來只差乙個(),意義完全不同。

陣列指標和指標陣列的記憶體示意圖:

指標陣列、陣列指標總結

指標陣列:首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身決定。它是

「儲存指標的陣列

」的簡稱。

陣列指標:首先它是乙個指標,它指向乙個陣列。在

32位系統下永遠是佔

4個位元組,至於它指向的陣列佔多少位元組,不知道。它是

「指向陣列的指標

」的簡稱。

3.再複雜一點的

函式指標 int (*pfun)(int,int);

結論:pfun是一函式指標,即pfun指向乙個函式,該函式有兩個引數,引數型別是int、int,並且函式的返回值的型別是int。

解析過程:先看標示符:pfun,由於使用了括號運算子,只能先解析(*pfun):說明pfun是一指標。現只剩下(int,int),進一步說明pfun指向的是一函式,該函式有兩引數,型別都是int,最後的int,說明函式的返回值型別是int。

4.更加複雜一點

int *(*pfun[3])(int, void (*)(int, int*));

關於typedef

typedef的作用是為乙個已有的型別取乙個新的名字:定義別名。

如,在資料結構與演算法系列經常看到

typedef int elemtype;

於是,在可以使用int的地方,也可使用elemtype替代,如語句 elemtype data;同樣表達著int data;的含義。

typedef更重要的用處是簡化型別名,如

typedef struct node

node, *pnode;

這裡使用typedef定義了多個別名,自此,可以直接使用node宣告乙個結構體型別,使用pnode宣告乙個指向該結構體型別的指標,結構體型別的成員組成如上所示。

除此之外,typedef也常用於複雜的宣告,如

typedef int(*p)(int, char);

解析這種宣告的方法是,完全按照上述所講的c的宣告方法解析即可。此處p就是函式指標,該函式原型是int (int, char);

再如,typedef int f(void);

此時,f是函式型別,該函式引數為空,返回int。

故,宣告 f f;就是宣告了int f(void);

專欄目錄:

娓娓道來c指標 8 開發可變引數函式

8 開發可變引數函式 在c語言中,可變引數的函式極其常見,如常用的printf 可變引數函式的一般形式如下 返回值型別 函式名 型別1 引數1,型別2 引數2,型別n 引數n,如上所示,這是乙個典型的可變引數樣式,它共有n個確定的引數,最後的.表示可變引數的含義。必須指出.必須位於最後,並且它至少要...

娓娓道來c指標 3 指標和陣列

3 指標和陣列 在c中指標和陣列似乎有著千絲萬縷的關係。其實它們不是一回事 指標是指標,陣列是陣列,兩者不相同。說它們有關係,不過是因為常見這樣的 int main int n sizeof array sizeof int int p array int i for i 0 i n i print...

娓娓道來c指標 3 指標和陣列

3 指標和陣列 在c中指標和陣列似乎有著千絲萬縷的關係。其實它們不是一回事 指標是指標,陣列是陣列,兩者不相同。說它們有關係,不過是因為常見這樣的 cpp view plain copy print int main int n sizeof array sizeof int int p array...