分析C語言的宣告的優先順序

2021-07-11 05:57:46 字數 1049 閱讀 9995

c語言的宣告是c語言區別於其他語言的一大亮點,也是一大難點。本文針對的是有一些c語言基礎的同學。所以,如果有同學還不清楚c語言的變數的宣告和定義的,現在可以關閉本頁面了。

本文主要講解的是c宣告的優先順序規則。

如下所示:

下面通過乙個例子來具體說明上面的宣告優先順序。

char * const *(*next)();

剛看這個宣告,比較暈,不知,從何下手,但是按照上面的優先順序順序,一步一步解析,答案很簡單;

a 首先,從變數名開始,看變數名「next」,注意它是直接被括號所括住的。

b 1、把括號當做乙個整體,可以得出」next是乙個指向...的指標「。接著我們看括號外的左邊有星號*,右邊有括號(),該選擇哪乙個?這個時候看第二步;

2、右邊的括號優先順序要高一些,所以,得出「next是乙個函式指標」,如果是函式的話,得要有傳入引數,和返回引數,我們可以看出,沒有傳入引數,但是,有返回引數。

3、處理字首「*」,得出指標所指向的內容。

c 最後 ,把「char * const"解釋為指向字元的常量指標。

以上分析的結果是:「next是乙個指標,它指向乙個函式,該函式返回另乙個指標,該指標指向乙個型別為char的常量指標」。

如果對上面結果理解有困難的話,可以打個比方,next指向的指標的函式設為func,func的返回型別為乙個指標p,該指標指向乙個常量指標cp,cp指向的內容型別為char型別。注意,這裡的const修飾的p所指向的內容,也即cp,而不是最後的char型別。

如果你已經弄明白了上述的過程,現在有乙個例項:

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

按照上面的步驟來:

1.c是陣列[0...9],陣列元素是指標

2.跳出當前的括號,注意後面的括號,表示,陣列中的元素是函式指標,即陣列中的元素指標指向函式,函式的傳入引數是int **p形式。

3.函式的返回型別是char *型別。

C語言中宣告的優先順序規則

a 宣告從它的名字開始讀取,然後按照優先順序規則順序讀取 b 優先順序從高到低依次是 b.1 宣告中被括號括起來的部分 b.2 字尾操作符 括號 表示這是乙個函式,而 方括號表示這是乙個陣列 b.3 字首操作符 星號 表示 指向.的指標 c 如果const和 或 volatile關鍵字的後面緊跟型別...

C語言宣告的優先順序規則

a 宣告從它的名字開始讀取,然後按照優先順序順序依次讀取 b 優先順序從高到低依次是 b.1 宣告中被括號括起來的那部分 b.2 字尾操作符 括號 表示這是乙個函式,而方括號表示這是乙個陣列 b.3 字首操作符 星號 表示 指向.的指標 c 如果const和 或 volatile關鍵字的後面緊跟型別...

C語言宣告時 的優先順序

陣列名後面的 和 具有相同的優先順序,它們的優先順序高於 例如 int a 10 10 先和a結合,它宣告了乙個含有10個元素的陣列,其中每個元素都是指向 int 型別的指標.int a 10 和 優先順序相同,並且都是從左向右結合,和 a 先結合,因此 a 是乙個指向陣列的指標,該指標內含10個元...