超科技霸主:为什么下面程度算出是84

来源:百度文库 编辑:高校问答 时间:2024/04/27 14:55:23
int d=1;
fun (int p)
{int d=5;
d+=p++;
printf("%d",d);
}
main()
{ int a=3;
fun(a);
d+=a++;
printf("%d\n",d);
}

int d=1;
fun (int p)
{int d=5; //局部变量d=5
d+=p++; //p++,本身加1,但与++p不同,p++是先d+=p之后,p才加1
//所以这里d+=p++相当于d+=3,局部变量d=8
printf("%d",d); //输出局部变量d 所以输出8
}
main()
{ int a=3;
fun(a);
d+=a++; //这里是全局变量d+=a++ a=3,所以相当于d+=3 d=1+3=4
printf("%d\n",d); //输出全局变量d=4
}

那你说为什么下面程度算出不是84????

准确的说你这个程序是算了两个结果一个是8 一个是4
调用fun(a)的时候 fun(int p)中的d = 5 p = 3;
执行d+=p++后 d = 8, p = 4 输出了d 8
退出了fun(a)后 这时候的d是全局变量1 d+=a++ 执行完d=4, a=4 此时输出了d 4
最后输出就是84

这道题的关键部分就是只要知道d+=a++的实际运行过程就行了!
是这样的,原式子是这样的d=d+a;a=a+1
就是说,a++是指a执行完左边的运算符之后再加1的.
再加上d是全局变量,两次的结果当然是8和4了!
所以运行完之后,就是84了!

8跟4是两次输出的结果,并不是一个数字84啊