C語言 列指針
列指針指向的是二維數(shù)組中某一行的某個具體元素。
a[0]既是一維數(shù)組的名稱,也是該行的首地址,而且是該行第一個元素的地址a[0]+0; a[0]+1就是第一行第2個元素的地址;a[0]+2就是第一行第3個元素的地址……同樣,對于二維數(shù)組第二行來說a[1]是第二行這個一維數(shù)組(含4個元素)的首地址,a[1]+0是二維數(shù)組第二行第一個元素的地址,a[1]+1是第二行第二個元素的地址……
可以將列指針理解為行指針的具體元素,而行指針理解為列指針的地址。那么行指針與列指針之間具有怎樣的轉換關系呢?行指針中存放的是列指針的地址,所以,行指針與列指針有如下關系:
*行指針----列指針
&列指針----行指針
注意列指針與普通指針定義方式、含義其實是一樣的,只不過針對二維數(shù)組就叫列指針。例如:
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int *p;
p=a[0];
這里a[0]代表a[0][0]的地址,它與&a[0][0]等效,p的值就是a[0][0]的地址,也就是p指向a[0][0]。p+1就是a[0][1]的地址,若要引用a[0][1]的值可以用*(p+1),因為二維數(shù)組在內存中是以行優(yōu)先的規(guī)律轉換成一維數(shù)組存放在內存中,所以a[0][3]之后存放的是a[1][0],(p+6)指向的就是a[1][2]。
同理,第二行各元素的地址可以用a[1]+0、a[1]+1、a[1]+2、a[1]+3表示。因為第一行a[0]、第二行a[1]及第三行a[2]可以分別表示為*(a+0)、*(a+1)、*(a+2)。所以二維數(shù)組中任意元素a[i][j]的地址可以表示為a[i]+j或*(a+i)+j,而元素值則表示為*(a[i]+j)或*(*(a+i)+j)。例如,元素a[1][2]可表示為*(a[1]+2)或*(*(a+1)+2)。行指針和列指針的關系如表所示。
行指針 | 轉換成列指針 | 列指針等價表示 | 內容 | 內容等價表示 | 含義 |
a或 a+0 | *a | a[0] | *a[0] | *(*a) | a[0][0] |
a+1 | *(a+1) | a[1] | *a[1] | *(*(a+1)) | a[1][0] |
a+2 | *(a+2) | a[2] | *a[2] | *(*(a+2)) | a[2][0] |
點擊加載更多評論>>