我在任何地方的书中都找不到答案。第二个printf语句打印x:75 y:0,我不知道为什么。请帮忙
#include<stdio.h>
Int scaleBack(int);
Void setValues(int*, int*, int);
Int main()
{
Int x = 75;
Int y = 17;
Int factor;
Factor = scaleBack(x / y);
setValues(&x, &y, factor);
printf(“factor: %d\n”, factor);
printf(“x: %d y: %d\n”, x, y);
return(0);
}
Int scaleBack(int quotient)
{
Int fact;
Fact = (quotient + 2) % (quotient + 1);
Return(fact);
}
Void setValues(int *ax, int *ay, int factor)
{
*ax = *ax * factor;
*ay = *ay * (1 – factor);
}
最佳答案
factor
为1:x/y
为75/17,即4。您调用scaleBack(4)
,其计算为(4 + 2)%(4 + 1)= 6%5 = 1。
然后,由于以下原因,setValues()
会将y
设置为0:
*ay = *ay * (1 – factor);
因为
1-factor
为零。由于ay
指向y,因此y
的值为0。x
保持不变,因为setValues
乘以1。setValues
不返回,但是它正在处理main()
中的局部变量,因为您将其传递给x
和y
的指针。因此,在*ax
之外可以看到对*ay
和setValues
所做的修改。关于c - 为什么第二个print语句从void函数获取返回值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22054701/