黑马程序员技术交流社区

标题: 关于顺序点和函数实参含有自增自减运算符的问题 [打印本页]

作者: 强颜欢笑i    时间: 2015-4-9 21:14
标题: 关于顺序点和函数实参含有自增自减运算符的问题
C_Primer_Plus(第五版P218)中说当一个函数被调用时,将创建被声明为形式参数的变量,然后用计算后得到的实际参数的值初始化该变量。


C语言程序设计—现代方法(P43)函数调用执行之前实际参数必须全部计算出来。如果实际参数恰巧是含有++或者--运算符的表达式,那么必须在调用发生前进行自增货自减操作


在对顺序点的学习中知道函数调用时的函数入口点是顺序点。既然是顺序点的话那么在进入函数之前,函数的实参求值的副作用在进入函数时都已经完成。


那么问题来了:


#include <stdio.h>
#include <stdlib.h>
int main()
{
int a,b;
a=1;
b=test(a++);
printf("a=%d,b=%d",a,b);
system("pause");
return 0;
}
test(x)
{
int z;
z=x;
return z;
}


按照顺序点以及两本书所说的,a++在调用之前已经完成自增,即传给形参的值应该是2.但是实际上结果是 2,1.请问这是为什么?





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2