A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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.请问这是为什么?

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马