C 为什么第二个print语句从void函数获得返回值?
我在我的书中到处都找不到这个问题的答案。第二个printf语句打印x:75y:0,我不知道为什么。请帮忙C 为什么第二个print语句从void函数获得返回值?,c,void,C,Void,我在我的书中到处都找不到这个问题的答案。第二个printf语句打印x:75y: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, &am
#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);
}
#包括
整数回缩(Int);
无效设置值(int*,int*,int);
Int main()
{
Int x=75;
Int y=17;
智力因素;
系数=回缩(x/y);
设置值(&x和&y,系数);
printf(“系数:%d\n”,系数);
printf(“x:%d y:%d\n”,x,y);
返回(0);
}
整数回缩(整数商)
{
事实;
事实=(商+2)%(商+1);
返回(事实);
}
无效设置值(int*ax、int*ay、int因子)
{
*ax=*ax*因子;
*ay=*ay*(1-系数);
}
在此代码之后
Factor = scaleBack(x / y);
因子的值为1
您正在将(75,17,1)传递给setValues
例程。因此声明
*ay = *ay * (1 – factor);
将解析为*ay=17*(1-1),即0
*ay的值将为0,系数将为1:
x/y
为75/17,即4。您可以调用伸缩(4),它计算(4+2)%(4+1)=6%5=1
随后,setValues()
将y
设置为0,原因如下:
*ay = *ay * (1 – factor);
因为1-因子
为零。由于ay
指向y,y
获取值0x
保持不变,因为setValues
将其乘以1
setValues
没有返回,但它正在操作main()
中的局部变量,因为您将指针传递给了x
和y
。因此,对*ax
和*ay
所做的修改在设置值
之外可见(商+2)%(商+1)
的值对于商
的每个正值为1
因此,您对函数
scaleBack
的调用返回1,对函数setValues
的调用将y
设置为0。。你真幸运@EdHeal你在哪里看到UB?这不是我的代码,它在学习指南上,我输入了它。我觉得不应该返回值,但返回值必须有一个原因。您的代码甚至不会编译,问题已经编辑过了。仍然不能用所有那些大写字母编译