看到第五章程序员面试宝典里有题如下:
#include "stdafx.h"
#include <stdio.h>
int _tmain(int argc, _TCHAR* argv[])
{
int b = 3;
int arr[] = {6,7,8,9,10};
int *ptr = arr;
*(ptr++) += 123;
printf("%d,%d \n",*ptr,*(++ptr));
getchar();
return 0;
}
输出结果为: 8,8
相信很多人都做错了吧。
分析如下:
C中printf计算参数时,是从右往左压栈的。
其中,*(ptr++)+=123;等同于:*ptr = *ptr + 123; ptr++;
因此,这句执行后 ,ptr指向第二个元素,而先输出*(++ptr)结果,即是输出8,此时ptr指向第三个元素,输出仍然为 8.