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 ‘ 。