#include<stdio.h>
main()
{
int b = 3;
int arr[] = {6,7,8,9,10};
Sint *ptr = arr;
*(ptr++) += 123;
printf("%d,%d\n",*ptr,*(++ptr));
}
问:代码输出什么?
A.8 8 B.130 8 C.7 7 D.7 8
解析:
提前要知道C中的printf计算参数时是从右向左压栈的。
几个输出结果分别如下:
Sint *ptr = arr; 指针ptr指向arr数组的第一个元素6
*(ptr++) += 123; 这段代码分成两步,首先*ptr +=123得数组第一个元素是129然后ptr++,使ptr指向数组的第二个元素7
最后输出语句printf("%d,%d\n",*ptr,*(++ptr));
因为从右向左压栈,所以先++ptr,ptr指向第三个元素,*(++ptr)就是第三个元素的值8
再看*ptr此时ptr经过前一步运算已经指向第三个元素就是8
所以答案选A