注:原题在《程序员面试宝典》第三版
以下代码的输出结果是什么?
#include <stdio.h>
int main()
{
int arr[] = {6,7,8,9,10};
int *ptr = arr;
*(ptr++) += 123;
printf("%d,%d\n",*ptr,*(++ptr));
return 0;
}
答案:8 8
解析:关键点:C语言中printf 计算参数时是从右到左计算的
*(ptr++) += 123;
相当于
*ptr=*ptr + 123;
ptr++;
此时ptr应指向第二个元素7
printf("%d,%d\n",*ptr,*(++ptr));
这句其实是先执行 *(++ptr),此时ptr应指向第三个元素8,
再执行 *ptr,此时ptr还是指向第三个元素8。