列指针指向的是二维数组中某一行的某个具体元素。
a[0]既是一维数组的名称,也是该行的首地址,而且是该行第一个元素的地址a[0]+0; a[0]+1就是第一行第2个元素的地址;a[0]+2就是第一行第3个元素的地址……同样,对于二维数组第二行来说a[1]是第二行这个一维数组(含4个元素)的首地址,a[1]+0是二维数组第二行第一个元素的地址,a[1]+1是第二行第二个元素的地址……
可以将列指针理解为行指针的具体元素,而行指针理解为列指针的地址。那么行指针与列指针之间具有怎样的转换关系呢?行指针中存放的是列指针的地址,所以,行指针与列指针有如下关系:
*行指针----列指针
&列指针----行指针
注意列指针与普通指针定义方式、含义其实是一样的,只不过针对二维数组就叫列指针。例如:
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),因为二维数组在内存中是以行优先的规律转换成一维数组存放在内存中,所以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)。所以二维数组中任意元素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] |
已有 22658 名学员学习以下课程通过考试
最需教育客户端 软件问题一手掌握
去 App Store 免费下载 iOS 客户端
点击加载更多评论>>