⼆维数组的⾏地址、列地址,与元素的存储1、连续存储
2、⼆维数组的⾏地址与列地址
1)⾏地址
1、⼆维数组中,数组名a的值,是数组a⾸元素a[0][0]的地址,即&a[0][0],第⼀⾏第⼀个元素的地址;
2、⼆维数组中,数组名a+1是数组a的元素a[1][0]的地址,即&a[1][0],第⼆⾏第⼀个元素的地址;
2)列地址
1、⼆维数组中,a[0]的值,即该数组的⾸元素a[0][0]的地址,即&a[0][0];
2、⼆维数组中,a[0]+1的值,是数组元素a[0][1]的值,即&a[0][1];
3)混合⼀下
1、⼆维数组中,“a[0]+1”是指向数组元素a[0][1]的地址,“a[1]+2”是指向数组元素a[1][2]的地址;
2、同样的,⼆维数组中,“*(a+1)+2”是指向数组元素a[1][2]的地址,与“a[1]+2”相等;
注:
*(a+1)表⽰第2⾏的⾏地址;
*a+1表⽰第⼀⾏第⼆个元素的地址;
3、⼆维数组中,*(*(a+1)+2))是数组元素a[1][2]的值
/
*
*copyright(c) 2018,HH
*All rights reserved.
*作者:HH
*完成⽇期:2018年7⽉25⽇
*版本号:v1.0
*
*问题描:⼆维数组,元素地址的表⽰,⾏列地址的表⽰;
*输⼊描述:;
*程序输出:
*/
#include <stdio.h>
int main()
{
int a[2][3]={{1,2,3},{4,5,6}};
int i,j;
int *p1,*p2,*p3,*p4,*p5,*p6;
printf("array a is :\n");
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
printf("%d ",a[i][j]);
指针与二维数组
}
printf("\n");
}
printf("array b is :\n");
p1=a;//⼆维数组的数组名,即⾸元素a[0][0]的⾸地址;
p2=a+1;//a+1是数组a的元素a[1][0]的地址,即&a[1][0]
p3=a[0];//同a[0][0]的地址,即第⼀⾏第⼀个元素的地址
p4=a[1];//同a[1][0]的地址,即第⼆⾏第⼀个元素的地址
printf("p1=a指向的值是:%d;地址是:%d\n",*p1,p1);
printf("p2=a+1指向的值是:%d;地址是:%d\n",*p2,p2);    printf("p3=a[0]指向的值是:%d;地址是:
%d\n",*p3,p3);    printf("p4=a[1]指向的值是:%d;地址是:%d\n",*p4,p4);    p5=a[0]+1;//指向第⼀⾏,第⼆列元素的地址;
p6=a[1]+1;//指向第⼆⾏,第⼀列元素的地址;
printf("p5=a[0]+1指向的值是:%d;地址是:%d\n",*p5,p5);    printf("p6=a[1]+1指向的值是:%d;地址是:%d\n",*p6,p6);    printf("*(a+1)指向的地址是:%d\n",*(a+1));
printf("*(*(a+1))指向的值是:%d\n",*(*(a+1)));
printf("*(a+1)+2指向的地址是:%d\n",(*(a+1)+2));
printf("*(a+1)+2指向的值是:%d\n",*(*(a+1)+2));
printf("*a+2指向的值是:%d;地址是:%d\n",*(*a+2),*a+2);    return 0;
}
3)⾏地址,列地址的等价写法
注:在⼆维数组a[i][j]中,a[i]是“⾏名”,等价于指针;a[0]等价于a,都表⽰指针;
a[1]等价于a+1,都表⽰指针;
a[1]+1等价于*(a+1)+1,都表⽰指针;
注意防⽌越界!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。