c允許同時(shí)使用多于1個(gè)的修飾符蛋叼,這就使得可以創(chuàng)建如下各種各樣的類(lèi)型
int board[8][8];//int數(shù)組的數(shù)組
int**ptr;//指向int的指針的指針
int *risks[10];//具有10個(gè)元素的數(shù)組十兢,每個(gè)元素是一個(gè)指向int的指針
int (*rusks)[10];//一個(gè)指針洽腺,指向具有10個(gè)元素的int數(shù)組
int *oof[3][4];//一個(gè)3?4的數(shù)組武福,每個(gè)元素是一個(gè)指向int的指針
int (*uuf)[3][4];//一個(gè)指針,指向3×4的int數(shù)組
int(*uof[3])[4];//具有4個(gè)元素的int數(shù)組的指針
弄清楚這些聲明的訣竅便于理解使用修飾符的順序缭保。下面這些規(guī)則會(huì)讓您對(duì)其有所了解:
1汛闸、表示一個(gè)數(shù)組的[]和表示一個(gè)函數(shù)的()具有相同的優(yōu)先級(jí),這個(gè)優(yōu)先級(jí)高于簡(jiǎn)潔運(yùn)算符*的優(yōu)先級(jí)涮俄。這意味著下面的聲明使得risks是一個(gè)指針數(shù)組蛉拙,而不是一個(gè)指向數(shù)組的指針:
int*risks[12];
2尸闸、[]和()都是從左到右進(jìn)行結(jié)合的彻亲。下面的聲明使goods是一個(gè)由12個(gè)具有50個(gè)int值的數(shù)據(jù)構(gòu)成的數(shù)組,而不是一個(gè)由50個(gè)具有12個(gè)int值的數(shù)組構(gòu)成的數(shù)組:
int goods[12][50];
3吮廉、[]和()具有相同的優(yōu)先級(jí)苞尝,但由于它們是從左到右結(jié)合的,所以下面的聲明在應(yīng)用方括號(hào)之前先將*和rusks組合在一起宦芦。這意味著rusks是一個(gè)指向具有10個(gè)int值的數(shù)組的指針:
int (*rusks)[10];
我們把這些規(guī)則應(yīng)用于下面這個(gè)聲明:
int off[3][4];
[3]具有比更高的優(yōu)先級(jí)宙址,并且根據(jù)從左到右的規(guī)則,它的優(yōu)先級(jí)比[4]高调卑。因此抡砂,off是一個(gè)具有3個(gè)元素的數(shù)組。下面是[4]恬涧,所以off的元素是具有4個(gè)元素的數(shù)組注益。*說(shuō)明這些元素都是指針。int完成了該描述:off是一個(gè)3元素的數(shù)組溯捆,每個(gè)元素是由4個(gè)指向int的指針組成的數(shù)組丑搔。或者簡(jiǎn)單的說(shuō)提揍,它是一個(gè)3×4的指向int的指針數(shù)組啤月。需要為12個(gè)指針留出存儲(chǔ)空間。
現(xiàn)在來(lái)看看這個(gè)聲明:
int(*uuf)[3][4];
圓括號(hào)使修飾符*具有更高優(yōu)先級(jí)劳跃,所以u(píng)uf就是一個(gè)指向3×4的int數(shù)組的指針谎仲。需要為一個(gè)單個(gè)指針留出存儲(chǔ)空間。
這些規(guī)則同樣也產(chǎn)生下面的類(lèi)型:
char*fump();//返回指向char的指針的函數(shù)
char(*frump)();//指向返回類(lèi)型為char的函數(shù)的指針
char(*flump[3])();//由3個(gè)指針組成的數(shù)組刨仑,每個(gè)指針指向返回類(lèi)型為char的函數(shù)
可以使用typedef建立一系列相關(guān)的類(lèi)型
typedef int arr5[5];
typedef arr5*p_arr5;
typedef p_arr5 arrp10[10];
arr5 togs; //togs是具有5個(gè)元素的int數(shù)組
p_arr5 p2; //p2是一個(gè)指針郑诺,指向具有5個(gè)元素的int數(shù)組
arrp10 ap; //ap是具有10個(gè)元素的指針數(shù)組,每個(gè)指針指向具有5個(gè)元素的int數(shù)組
當(dāng)把結(jié)構(gòu)也帶入這樣的描述中贸人,聲明的可能性真的會(huì)變得很復(fù)雜