c語言指針數(shù)組的用法?
一維數(shù)組指針
一維數(shù)組的指針是直接將一維數(shù)組的首地址賦予指針變量,之后通過指針變量的運(yùn)算逐漸輸出一維數(shù)組中的各個(gè)元素的值。
例如:int a[20];
int *p;
因?yàn)閿?shù)組名相當(dāng)于一個(gè)指針指向的就是一維數(shù)組的首地址(例如a[0]),所以可以直接將數(shù)組名賦予指針變量(例如p=a),無需加取地址符&;也可以讓指針變量指向第一個(gè)元素的地址(例如p=&a[0]);即p=a與p=&a[0]是等價(jià)的,(應(yīng)當(dāng)要注意的是:p=a是將數(shù)組首元素的地址賦給指針變量,而非將數(shù)組a的各元素的值賦給指針變量)
如果一個(gè)指針變量p已經(jīng)指向數(shù)組中的一個(gè)元素,則p+1指向數(shù)組中的下一個(gè)元素,p-1指向的是數(shù)組中的上一個(gè)元素。(注意:執(zhí)行P+1或P-1時(shí),并不是將P的值簡單的加1,而是加上一個(gè)數(shù)組元素所占用的字節(jié)數(shù),例如:float型,每個(gè)元素占4個(gè)字節(jié),所以p+1意味著使p的地址加4個(gè)字節(jié),以便讓其指向下一個(gè)元素)
這里的a+i與p+i是等價(jià)的,也可以用數(shù)組名進(jìn)行運(yùn)算;
e
*(a+i)==*(p+i);
二維數(shù)組指針
令int a[2][3]={{1,2,3},{4,5,6}}
在二維數(shù)組中數(shù)組名指向數(shù)組的首元素,但是不是簡單的表示一個(gè)簡單的元素,而是由多個(gè)元素所組成的一維數(shù)組,因此數(shù)組名指的是二維數(shù)組首行(即下標(biāo)為0的那一行)的首地址,a+1即表示下標(biāo)為1的那一行元素,又因?yàn)閿?shù)組名代表首元素的地址,所以a即代表二維數(shù)組中a[0][0]的值,a+1即a[1][0]的值。a[0]等價(jià)于*(a+0),a[1]等價(jià)于*(a+1),(a+1)+1的值即&a[1][1]。要想得到a[1][1]的值,就要再進(jìn)行取值,即(a[1]+1)或*((a+1)+1)為a[1][1]的值。(注意:(a+i)與a[i]是等價(jià)的)
切記二維數(shù)組名是指向二維數(shù)組首行,而非指向二維數(shù)組a[0][0];
二維數(shù)組在指向行的指針前加*,就轉(zhuǎn)化為了指向列的指針,反之,在二維數(shù)組指向列的指針前加&,就轉(zhuǎn)化為了指向行的指針.(例如:&a[i]或a+i指向行.而a[i]或*(a+i)則指向列)
在定義時(shí)的int (*p)[4]的意思是指針變量p指向包含四個(gè)整型元素的一維數(shù)組,即在二維數(shù)組中一共有四行元素