c语言·指针引用多维数组出现负数【简洁易懂版】

以一道题为例

若有声明int a[][3]={2,4,6,8,10,12},b,c,*p1,(*p2)[3]=a+1;执行语句p1=*p2-2;b=p1[1];c=p2[1][-2];后,变量b的值____,c的值____。

解析:

首先可以知道a这个数组形如

{2,4,6

8,10,12}。

p2指向a[1]这行——也就是8开头的这一行。

p1=*p2-2——*p2指向p2的第0列也就是8,再-2就会到4。(当指针指向列也就是某个数时,加减就变成数的位置的偏移

b=p1[1]——p1[1]~~p1+1——也就是6

c=p2[1][-2]~~*((*p2+1)-2)——首先是指向p2下一行的位置即8这行的下行(虽然a这个数组没有定义下一行,但是存在这个行并且行地址不可测),再-2是在指向8下行的第0列这个基础上再-2(同上,变成数的位置的偏移)——指向10

答案:6,10

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值