二维数组与指针

本文详细介绍了如何在C++中通过指针操作二维数组,包括行指针的定义、元素访问、行索引和列索引的组合,以及指针自增对数组遍历的影响。通过实例演示了**p、*p++、p[i]+j**等表达式的应用和输出结果。
摘要由CSDN通过智能技术生成
//定义一个三行两列的二维数组
int a[3][2] = {{1,3},{2,4},{5,7}};

/*p先和*结合,表示p是一个指针,int[2] 是他的类型,说明指针指向一个有两个元素的数组.
二维数组的列元素个数一致。上面定义的二维数组有两列,故定义行指针时使用int[2]*/
int (*p)[2] = a;
cout<<*p<<endl; //输出0x61fe00.即二维数组中第一个一维数组首元素的地址。
cout<<**p<<endl; //输出1.即二维数组中第一个一维数组首元素的值。
cout<<*p[0]<<endl;效果同上
cout<<*a[0]<<endl;效果同上。

cout<<*(p+i)<<endl; 输出二维数组第i行一维数组首元素地址。
cout<<*(p+i)+j<<endl;输出二维数组第i行一维数组第j列的元素的地址。
cout<<p[i]+j<<endl;效果同上。
cout<<a[i]+j<<endl;效果同上。

cout<<*(*(p+i)+j)<<endl;输出二维数组第i行一维数组第j列的元素的值。
cout<<*(*(p+1)+1)<<endl; 输出4.下标要从0开始算。第0行是{1,3},第一行是{2,4}
cout<<*(p[i]+j)<<endl;效果同上。
cout<<*(a[i]+j)<<endl;效果同上。

另 p++与*p++和**p++都会改变指针的指向。二维数组中p++和*p++和**p++会跳到下一行数组首元素地址。++和 * 优先级相同。结合方向自右向左。故p++ 是返回p指针,然后指向下一个数值的地址。

int a[3][2] = {{1,3},{2,4},{5,7}};
int (*p)[2] = a;
cout<<**p<<endl; //输出1.
p++;//或者*p++。或者**p++三者效果一样。
cout<<**p<<endl;输出2.由此可见p++是直接跳了定义指针的时候一维数组的长度的地址。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值