【番杰的问答笔记】数组与指针

1. 问题

已知有定义char arr[4] = { ‘s’, ‘i’, ‘p’, ‘c’ }; 令char * p等于&arr[2],则(-1)[p]表示什么字符?简述原因。

2. 回答

答案:‘ i ’
原因:
(1)首先,你需要知道:(-1)[p],这个是什么意思。
答,这一种“语法糖(Syntactic sugar)”,具体可以参考:什么是语法糖
它表达的意思就是 * ((-1)+ p );
同样的可以把(-1)与 p 交换位置:*( p + (-1)),它的语法糖会比之前的更好理解一些:p[-1];

(2)知道语法糖之后,下面的就很好理解了,结果也就呼之欲出啦:
咱们看这个*( p + (-1)),
已知:char * p = &arr[2];
意思就是:指针p指向字符‘ p ’,即指针内存放字符‘ p ’地址;
咱们假设:数组arr的其实地址为0;
那么:‘ s ’ 的地址为0;
‘ i ’ 的地址为1;
‘ p ’ 的地址为2;
‘ c ’ 的地址为3;
而由已知指针p指向’p‘的地址也就是2;
代入*( p + (-1));
为 * (2-1) = * (1);
注意*是对地址进行解引用;
所以结果就是对地址1进行解引用,即为’ i ‘ 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

番杰

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

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

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

打赏作者

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

抵扣说明:

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

余额充值