我在任何地方的书中都找不到答案。第二个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()中的局部变量,因为您将其传递给xy的指针。因此,在*ax之外可以看到对*aysetValues所做的修改。

关于c - 为什么第二个print语句从void函数获取返回值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22054701/

10-12 05:24