奇特的聲明

c允許同時使用多于1個的修飾符,這就使得可以創(chuàng)建如下各種各樣的類型

int board[8][8];//int數(shù)組的數(shù)組
int**ptr;//指向int的指針的指針
int *risks[10];//具有10個元素的數(shù)組,每個元素是一個指向int的指針
int (*rusks)[10];//一個指針,指向具有10個元素的int數(shù)組
int *oof[3][4];//一個3?4的數(shù)組,每個元素是一個指向int的指針
int (*uuf)[3][4];//一個指針,指向3×4的int數(shù)組
int(*uof[3])[4];//具有4個元素的int數(shù)組的指針

弄清楚這些聲明的訣竅便于理解使用修飾符的順序。下面這些規(guī)則會讓您對其有所了解:
1、表示一個數(shù)組的[]和表示一個函數(shù)的()具有相同的優(yōu)先級,這個優(yōu)先級高于簡潔運算符*的優(yōu)先級。這意味著下面的聲明使得risks是一個指針數(shù)組,而不是一個指向數(shù)組的指針:

int*risks[12];

2、[]和()都是從左到右進(jìn)行結(jié)合的。下面的聲明使goods是一個由12個具有50個int值的數(shù)據(jù)構(gòu)成的數(shù)組,而不是一個由50個具有12個int值的數(shù)組構(gòu)成的數(shù)組:

int goods[12][50];

3、[]和()具有相同的優(yōu)先級,但由于它們是從左到右結(jié)合的,所以下面的聲明在應(yīng)用方括號之前先將*和rusks組合在一起。這意味著rusks是一個指向具有10個int值的數(shù)組的指針:

int (*rusks)[10];

我們把這些規(guī)則應(yīng)用于下面這個聲明:
int off[3][4];
[3]具有比
更高的優(yōu)先級,并且根據(jù)從左到右的規(guī)則,它的優(yōu)先級比[4]高。因此,off是一個具有3個元素的數(shù)組。下面是[4],所以off的元素是具有4個元素的數(shù)組。*說明這些元素都是指針。int完成了該描述:off是一個3元素的數(shù)組,每個元素是由4個指向int的指針組成的數(shù)組。或者簡單的說,它是一個3×4的指向int的指針數(shù)組。需要為12個指針留出存儲空間。
現(xiàn)在來看看這個聲明:

int(*uuf)[3][4];

圓括號使修飾符*具有更高優(yōu)先級,所以uuf就是一個指向3×4的int數(shù)組的指針。需要為一個單個指針留出存儲空間。
這些規(guī)則同樣也產(chǎn)生下面的類型:

char*fump();//返回指向char的指針的函數(shù)
char(*frump)();//指向返回類型為char的函數(shù)的指針
char(*flump[3])();//由3個指針組成的數(shù)組,每個指針指向返回類型為char的函數(shù)

可以使用typedef建立一系列相關(guān)的類型

typedef int arr5[5];
typedef arr5*p_arr5;
typedef p_arr5 arrp10[10];
arr5 togs;  //togs是具有5個元素的int數(shù)組
p_arr5 p2;  //p2是一個指針,指向具有5個元素的int數(shù)組
arrp10 ap; //ap是具有10個元素的指針數(shù)組,每個指針指向具有5個元素的int數(shù)組

當(dāng)把結(jié)構(gòu)也帶入這樣的描述中,聲明的可能性真的會變得很復(fù)雜

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 指針是C語言中廣泛使用的一種數(shù)據(jù)類型。 運用指針編程是C語言最主要的風(fēng)格之一。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu); ...
    朱森閱讀 3,614評論 3 44
  • 一、框架 1、Mac系統(tǒng)及常用工具、進(jìn)制;C數(shù)據(jù)類型、常量變量、運算符、表達(dá)式、格式化輸入輸出 2、關(guān)系運算符、邏...
    師景福閱讀 836評論 0 2
  • __block和__weak修飾符的區(qū)別其實是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用,...
    LZM輪回閱讀 3,594評論 0 6
  • 困擾我很久的問題,一直不明白為什么重寫equals()方法的時候要重寫hashCode()方法,這次總算弄明白了,...
    程序員的散漫生活閱讀 33,636評論 12 35
  • 關(guān)于想象力的感受 一直在提如何保護(hù)孩子的想象力,更不知道如何去幫到孩子的想象力,也不知道孩子的想象力的價值...
    小天sky閱讀 2,550評論 0 0

友情鏈接更多精彩內(nèi)容