为何C语言代码中4与5的差值计算结果为4而非-1?
问题原因解析
我们一步步拆解函数执行的过程,就能明白为什么b的结果是4而非-1:
- 初始状态:main函数里
a=4,b=5,指针p指向a,指针q指向b。 - 调用
fun(p,q)后,第一步执行*a = *a + *b:这里的*a对应main里的变量a,计算后a的值变成4+5=9。 - 第二步执行
*b = *a - *b:注意此时*a已经是修改后的9,而*b还是初始的5,所以计算结果是9-5=4,也就是main里的b被赋值为4。
你预期的b=-1,应该是想用原始的a值减去原始的b值(即4-5=-1),但因为第一步操作已经修改了*a的取值,第二步计算时用的是更新后的a,自然得不到预期结果。如果要实现这个预期,需要先把原始的*a或*b值暂存到临时变量中,比如:
int fun(int *a, int *b){ int temp = *a; // 保存原始a的值 *a = *a + *b; *b = temp - *b; // 用原始a值计算 }
内容的提问来源于stack exchange,提问作者Aevo
相关产品推荐
相关产品推荐

