关于取址和指针的一道题:*(*(&arr+1)-1)

((&arr+1)-1)

int arr[6] = {1,2,3,4,5,6};
((&arr+1)-1)的值是多少

首先我们要了解以下知识点:

1.arr,&arr,*arr分别是什么?

,打印arr和&arr的地址:0x28fe70,0x28fe70,虽然地址相同,但是代表的含义不同arr代表数组的首地址,&arr代表数组的地址

接下来我们打印arr+1和&arr+1,:

arr+1代表向后偏移一个元素的大小,&arr+1代表向后偏移一个数组的大小。

arr+1:0x28fe74
&arr+1:0x28fe88 越界了 //偏移一个数组的大小,6个元素
arr+6:0x28fe88 越界了 //向后偏移6个元素

看到这我们继续看上面这道题:

*( *(&arr+1)-1)

&arr+1:arr先向后偏移了一个数组的大小,
*(&arr+1)-1:向前偏移一个元素,此时地址指向arr[6]的最后一个元素的地址
*( *(&arr+1)-1):取这个地址中的内容 答案为6

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值