當前位置:才華齋>計算機>C語言>

C語言宣告學習之初級篇

C語言 閱讀(2.6W)

C語言為我們定義了四種基本資料型別:整型,浮點型,指標以及聚合型別(陣列和結構體等),在此基礎上,我們就可以宣告變數。我們平時經常說定義一個某種型別的變數,其實這樣說不確切,應該說是宣告變數。

C語言宣告學習之初級篇

變數宣告的基本形式是:

說明符(一個或多個) 宣告表示式列表

比如說:int a, b, c, d;

C語言中對指標的宣告比較有代表性,我們來看一下:

比如宣告一個指向int型的指標a:int *a;

這個語句表示表示式*a產生的結果型別是int,而我們又知道*操作符執行的是間接訪問操作,所以可以推斷a肯定是一個指向int的指標。

C語言在本質上是一種自由形式的語言,它給了程式設計師很大的'空間,我們同樣可以這樣寫:int* a,這個宣告與int *a時一個意思,而且似乎更為清楚,a被宣告為型別為int*的指標(實則不然),這會誘導我們這樣宣告三個指向int型的指標:

int* a, b, c;

也許你會很自然的以為這條語句把三個變數a、b、c都宣告為指向整型的指標,但是事實上我們被它的形式愚弄了,星號實際上是表示式*a的一部分,只對這個識別符號有用,a是一個指標,但是b和c都只是普通的整型而已,要宣告三指標,這樣寫是可以的:

int *a, *b, *c;

從這個簡單的例子我們可以看出C語言的宣告規則多麼具有迷惑性,呵呵,這也是C語言飽受批*的地方之一,但這決定與語言本身的設計哲學,我們無法改變,要想用好C語言,我們必須掌握它的語法規則。

我們再看一個例子:

int fun();

我們都知道它把f宣告為一個函式,它的返回值是一個整數。

如果這樣寫:

int *fun();

要想推斷出它的含義,我們必須知道*fun()是如何求值的。首先執行的是函式呼叫操作符(),因為它的優先順序高於間接訪問操作符*,所以fun是一個函式,它的返回值型別是一個指向整型的指標。

再看一個更為有趣的宣告:

int (*fun)();

這個宣告有兩對括號,每對括號的含義不同。第二對括號是函式呼叫操作符,但是第一對只起到聚組的作用。它導致間接訪問在函式呼叫之前進行,使fun是一個函式指標,它所指向的函式返回一個整型值。

那麼現在這個宣告應該很容易分析出來了

int *(*fun)();

fun還是一個函式指標,只是所指向的函式返回的是一個整型指標。

先寫到這裡,對C語言的宣告之旅才剛剛開始,下回我們將在中級篇裡討論更有趣的話題!