二维数组

1、定义
定义二维数组的一般格式为:
元素数据类型说明 数组名[常量表达式1][常量表达式2];
例如: int x[10][8];
2、数组名代表数组元素首元素的地址
“数组名代表数组元素首元素的地址”既适用于一位数组,也适用于二维数组。
对于一维数组int a[5]而言,数组名a就表示首元素a[0]的地址,即数组名a等价于&a[0];
对于二维数组int a[2][5]而言,数组名就表示首元素a[0]的地址,即数组名a等价于&a[0]。
接着看a[0],此时的a[0]有两重身份:在二维数组的第一个维度里a[0]是数组的首元素;而在第二维度里,a[0]本身就是个数组,该数组的首元素是a[0][0],所以此时a[0]代表一个数组名。
通过“数组名代表数组元素首元素的地址”可知,a[0]等价于&a[0][0]。而前面同时有a等价于&a[0]的结论,所以可以得到a等价于&&a[0][0]。
3、指针访问二维数组的两种方式
普通指针指向二维数组的第一维:

int a[2][5];
int *p1 = a[0];
int *p2 = a[1];
printf(“a[0][0] = %d.\n”,*p1);          //a[0][0]
printf(“a[0][1] = %d.\n”,*(p1+1));      //a[0][1];
printf(“a[1][1] = %d.\n”,*(p2+1));

数组指针访问二维数组:

int a[2][5];
int (*p)[5] = a;
printf(“a[0][0] = %d.\n”,**p); 
printf(“a[0][4] = %d.\n”,*(*p+4));
printf(“a[1][4] = %d.\n”,*(*(p+1)+4));

总结:
1、a[i][j] 等同于 ((p+i) + j);
2、p不解引用,对p加减是在第一维里编译地址
3、p解一次引用,对p加减是在第二维里编译地址
4、p解二次引用,才能访问到值,如*(*p);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值