C語言複雜宣告

2021-05-22 15:05:01 字數 2026 閱讀 5236

《c專家程式設計》第三章介紹了如何分析複雜的宣告,講的非常不錯。對於作者介紹的分析複雜宣告的方法,我沒有完全掌握,不過,我有我自己的一套方法來解析複雜的宣告,正所謂條條大道通羅馬,只要結果一樣,必須在乎過程呢。今天在網上找了幾個複雜的宣告,練練手(宣告的例子全部來自網路,原諒出處未詳)。記下此文,作個標記,待日後回味。

這個就不解釋了,每本c語言參考書上都會有的。作為乙個c/c++程式設計師還不會的話,說明你已經out了~~_~~

func是乙個指標,指向乙個函式,函式接收兩個引數,第乙個引數是int *,第二個引數是乙個函式指標(該函式指標接收int *引數,返回int值),函式返回int值。使用typedef來簡化一下:

int (*func)(int *p, int (*f)(int*));

/* 等價於 */

typedef int (*functor1)(int *);

typedef int (*functor2)(int *, functor1);

functor2 func;

func是乙個包含5個元素的陣列,陣列中的每個元素是函式指標,函式接收int *引數,並返回int值。用typedef來簡化一下:

int (*func[5])(int *p);

/* 等價於 */

typedef (*functor)(int *);

functor func[5];

func是乙個指標,指標指向包含5個元素的陣列,陣列是的每個元素是函式指標,該函式接收int *引數,並返回int值。用下面的**來表示一下func是個什麼東東:

int (*(*func)[5])(int *p);

/* func是下面這個東東: */

typedef int (*functor)(int *);

functor arr[5];

func = &arr;

func是乙個指標,指標指向函式,函式接收int *引數,返回指標,指標指向包含5個元素的int型陣列。用typedef來簡化一下:

int (*(*func)(int *p))[5];

/* 等價於 */

typedef int arr[5];

typedef arr *(*functor)(int *);

functor func;

func是乙個指標,指標指向行數為5, 列數為6的二維陣列,陣列中儲存的是指標,指標指向行數為7,列數為8的int型陣列。下面的**也許會讓你更清楚一點:

int (*(*func)[5][6])[7][8];

/* see it: */

typedef int arr[7][8];

arr *func1[5][6];

func = &func1;

func是乙個函式指標,函式接收int *引數,返回乙個指標,指標指向包括5個元素的陣列,陣列中的元素是函式指標,函式接收int *引數,返回int值。用typedef簡化一下下:

int (*(*(*func)(int *))[5])(int *);

/* 等價於 */

typedef int (*functor1)(int *);

typedef functor1 arr[5];

typedef arr *(*functor2)(int *);

functor2 func;

func是乙個三個陣列,陣列中的每個元素是指標,指標指向函式,函式指向int*引數,返回指幾包含5個元素的int陣列(嗷口),和typedef來簡化一下:

int (*(*func[7][8][9])(int*))[5]; 

/* 等價於 */

typedef int arr[5];

typedef arr *(*functor)(int *);

functor func[7][8][9];

看完這些例子,你暈了嗎?趕緊找個美女,給你做人工呼吸吧~_~~~

C語言複雜宣告

問題1 宣告與函式 void 0 讓我們從兩個不同的途徑來詳細分析這個問題。分析 首先,最基本的函式宣告 void function paramlist 最基本的函式呼叫 function paramlist 鑑於問題中的函式沒有引數,函式呼叫可簡化為 function 其次,根據問題描述,可以知道...

複雜宣告 C語言

今天看了 c專家程式設計 裡的 分析c語言的宣告 一章,終於懂了c語言的複雜宣告是怎麼解析的。雖然在平時寫 的時候用到複雜宣告的情況幾乎沒有,這裡還是做乙個記錄,也是加深對c語言宣告的理解。以下規則來自 c專家程式設計 c語言宣告的優先順序規則 c.如果const或volatile 關鍵字的後面緊跟...

C語言複雜宣告

乙個宣告 int p 分為四部分 1 p 2 p右面的符號 可以什麼都沒有 3 p左面的符號 可以什麼都沒有 4 最左面的型別說明符 解讀乙個宣告先從p開始,然後的順序是 右左右左右左右左 看完了p,然後從p的右邊開始看符號 因為優先順序高的符號 和 是放在右邊的 如果有符號,就和p先結合。看完右邊...