【第五章】赋值_printf顺序

看到第五章程序员面试宝典里有题如下:

#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.

posted on 2011-12-02 22:26  Ming明、  阅读(117)  评论(0编辑  收藏  举报