數(shù)組指針。
數(shù)組指針(行指針),定義 int (*p)[N]; 表示的是p是一個(gè)指針,指向一個(gè)整型的一維數(shù)組,該數(shù)組的長(zhǎng)度是N,若執(zhí)行 p+1, p將會(huì)跨過(guò)N個(gè)整型數(shù)據(jù)的長(zhǎng)度。
在數(shù)組指針中,()的優(yōu)先級(jí)高。
int(*a)[10] : a是一個(gè)數(shù)組指針,指向一個(gè)含有10個(gè)int元素的數(shù)組。
-------------------------------------example:-----------------------------
指針數(shù)組
指針數(shù)組,定義 int *p[N]; [ ] 先和p結(jié)合成一個(gè)數(shù)組,而 int * 說(shuō)明這是一個(gè)整型指針數(shù)組,其中有N個(gè)指針類(lèi)型的數(shù)組元素。指針數(shù)組指的是一個(gè)數(shù)組里面裝的是指針。
執(zhí)行p+1是錯(cuò)誤的 ;
執(zhí)行p=a是錯(cuò)誤的, 因?yàn)閜是個(gè)不可知的表示。
只存在p[0]、p[1]、p[2]...p[n-1],而且它們分別是指針變量可以用來(lái)存放變量地址。
*p=a是正確的,這里 *p 表示指針數(shù)組第一個(gè)元素的值,a的首地址的值。
在指針數(shù)組, [ ] 的優(yōu)先級(jí)高。
int *p[3] 表示一個(gè)一維數(shù)組內(nèi)存放著三個(gè)指針變量,分別是p[0]、p[1]、p[2]。
比如,字符指針數(shù)組不能用于直接存放字符串,因?yàn)橹羔様?shù)組的元素存放的都是存儲(chǔ)單元地址的指針變量,不能直接存放數(shù)值。
修改方案: 定義一個(gè)二維的字符數(shù)組,再把每行的起始地址賦給指針數(shù)組的相應(yīng)元素。
總結(jié):
數(shù)組指針只是一個(gè)指針變量,似乎是C語(yǔ)言里專(zhuān)門(mén)用來(lái)指向二維數(shù)組的,它占有內(nèi)存中一個(gè)指針的存儲(chǔ)空間。指針數(shù)組是多個(gè)指針變量,以數(shù)組形式存在內(nèi)存當(dāng)中,占有多個(gè)指針的存儲(chǔ)空間。
拓展:
比如要表示數(shù)組中i行j列一個(gè)元素:
*(p[i]+j)、*(*(p+i)+j)、(*(p+i))[j]、p[i][j] 都是正確的。
函數(shù)指針(指向函數(shù)的指針)
函數(shù)指針定義: 數(shù)據(jù)類(lèi)型標(biāo)識(shí)符 (*指針變量名)( );
eg: int (*p)(); p是一個(gè)指向函數(shù)的指針,函數(shù)的返回值是整型。
指針函數(shù)
指針函數(shù)定義: 數(shù)據(jù)類(lèi)型標(biāo)識(shí)符 *函數(shù)名 ( 形參數(shù)據(jù)說(shuō)明表列 );
通過(guò)返回一個(gè)數(shù)據(jù)的存儲(chǔ)單元地址或者一個(gè)數(shù)據(jù)集合的存儲(chǔ)單元的起始地址,達(dá)到返回一個(gè)數(shù)據(jù)或者一個(gè)數(shù)據(jù)集合的目的。
int *p(); 定義一個(gè)返回值是指針型數(shù)據(jù)的函數(shù)
結(jié)構(gòu)體數(shù)組
結(jié)構(gòu)數(shù)組就是一個(gè)數(shù)組,只不過(guò)數(shù)組中各元素的數(shù)據(jù)類(lèi)型是結(jié)構(gòu)類(lèi)型罷了。