计算机程序设计c++ 8-2:二维数组与指针

二维数组的指针

二维数组地址是映射为一维数组存储

设二维数组:int a[3][4],i,j;
二维数组a中ij列元素的地址二维数组在内存中映射为一个一维数组,因此可以通过指向元素的指针快速访问二维数组中的每个元素。

如:利用指向数组元素类型的指针变量p,寻找a数组中元素的最大值
假设:

int *p,max=a[0][0]; //max为最大值
for(p=&a[0][0]; p<&a[0][0]+12; p++)  // 地址被映射为一个一维数组,数组长度为3*4=12
{
	if(*p>max)
		max=*p;
}
cout << "max=" << max << endl;

二维数组的行地址

int a[3][4];
由3行元素组成,即a - a[0],a[1],a[2]
而每行又由4个类型相同的元素组成,分别对应一个一维数组。

a[0]-a[0][0],a[0][1],a[0][2],a[0][3]
a[1]- a[1][0],a[1][1],a[1][2],a[1][3]
a[2]- a[2][0],a[2][1],a[2][2],a[2][3]

其中:
a为行元素数组的名字,即a代表&a[0],即0行的地址

  • a+1代表&a[1],即1行的地址
  • a+2代表&a[2],即2行的地址

二维数组元素的指针法表示

由于 a[0]是由a[0][0],a[0][1],a[0][2]和a[0][3]四个元素构成的一维数组;
因此,a[0]代表&a[0][0],即0行的首元素的地址
这样 a[0]+1代表首元素的下一个元素的地址即&a[0][1]
同理,a[1]代表&a[1][0],即1行的首元素的地址, 而a[0]+j代表&a[0][j]
a[i]代表&a[i][0],即i行的首元素的地址,而a[i]+j代表&a[i][j]

由此得到:*(a[i]+j) 等价于a[i][j]
又由于 a[i]等价于*(a+i),因此,*(a[i]+j) )也等价于*(*(a+i)+j)
即:*(*(a+i)+j)与a[i][j]等价

*(*(a+i)+j)称为二维数组元素a[i][j]的指针法表示。
其中,a为首行地址,a+ii行的行地址,而*(a+i)a的i行0列元素的地址, 而 *(a+i)+j为a的i行j列元素的地址。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

uncle_ll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值