为什么第二个print语句从void函数中获取返回值?

时间:2014-02-26 22:20:35

标签: c void

我无法在任何地方找到答案。第二个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);
}

3 个答案:

答案 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()中的局部变量,因为您将指针传递给xy。因此,对*ax*ay所做的修改在setValues之外可见。