例题,以下代码的输出结果是什么?
#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; }
解析:
首先明确C中的printf函数是从右到左压栈的。
*(ptr++) += 123; 等同于 *ptr =*ptr + 123; ptr++;(就算ptr++有括号也是要后算的)。此时ptr指向数组第二个元素7.
printf("%d,%d\n",*ptr,*(++ptr));从右到左运算,第一个是 (++ptr),得到*ptr=8,此时ptr指向第三个元素8,第二个*ptr值也为8.