我无法在任何地方找到答案。第二个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);
}
答案 0 :(得分:1)
对于(quotient + 2) % (quotient + 1)
的每个正值,quotient
的值为1。
因此,您对函数scaleBack
的调用返回1,而您对函数setValues
的调用将y
设置为0。
答案 1 :(得分:0)
在此代码之后
Factor = scaleBack(x / y);
因子的值是1
你正在将(75,17,1)传递给setValues
例程。因此声明
*ay = *ay * (1 – factor);
将解析为* ay = 17 *(1 - 1),即0
* ay的值将为0
答案 2 :(得分:0)
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
之外可见。