二维数组与指针

//定义一个三行两列的二维数组
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++是直接跳了定义指针的时候一维数组的长度的地址。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值