c語言複雜變數聲明(數組、指標、函數)

來源:互聯網
上載者:User

最近重新研讀了c語言指標方面的資料,現在對c語言中複雜聲明進行總結。

這裡指的複雜聲明指的是解讀像下面這種聲明代碼含義的。

int (*(*x)(int *,char *))(int);

(以上代碼聲明了一個函數指標,這個函數接收一個整型指標和一個字元指標作為參數,函數指標,這個函數接收一個整型參數,返回一個整型。)

c語言變數的聲明始終貫徹兩點:1.聲明和使用的文法盡量保持一致

例如:聲明一個函數指標

double (*fun)(double);

使用這個函數指標

#include <math.h>fun=sin;doube reslut=(*fun)(0.5);//use point fun
2.聲明語句不是的閱讀不是按照從左往右的讀取順序,而是要根據各個符號的優先順序進行閱讀的

這一點非常重要,是判斷一個聲明到底是聲明了一個什麼變數的準則。具體講有三類聲明符:

*   ()   [ ]

其中“*”聲明指標,各種各樣的指標,包括函數指標;

“()”是專門用來聲明函數指標的;

“[ ]”是用來聲明數組的。

三個運算子“[ ]”和“()”的優先順序別最高,結合律是“自右向左”。

明確了這兩點後,我們就可以使用這兩點來解讀複雜聲明了。

具體規則:首先從聲明的變數符開始根據優先順序進行閱讀,判斷定申明了一個什麼變數。然後一層一層逐級向外拆開。*則申明了指標;[ ]則申明了數組;()則申明了函數。

例如解讀本文一開始的例子:

int (*(*x)(int *,char *))(int);

首先找到x,然後根據優先順序找到*x,則證明整條語句聲明了一個指標。再繼續看到(*x)右邊是一個()符,則證明x是一個指向函數的指標,既然是函數指標那剩下的部分就是描述函數傳回值類型和參數類型;再看()裡則可以解讀出函數的輸入是一個整型指標和一個字元指標。然後再以“(*x)(int *,char *)”為整體看,找到優先順序最高的是*符號,則證明傳回值是一個指標;再繼續看找到了(int)則證明這個指標是指向一個函數的,函數的參數是整型;再繼續找到最後一個int,則看出這個函數的傳回值是一個整型。到此解讀完畢。

簡要的說就是:聲明了一個函數指標,這個函數接收一個整型指標和一個字元指標作為參數,返回函數指標,這個函數指標指向的函數接收一個整型參數,返回一個整型。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.