我很难理解C处理返回值的方式。比如我们说:
int one = 0;
one = foo(); // Why isn't one being assigned 10?
// Clearly there is a difference between these two
printf("%d", one); // one is still 0
printf("%d", foo());
int foo()
{
return 10;
}
我似乎无法阐明为什么会有差异,以及为什么一个人不会在另一个人身上工作。
谢谢!
答案 0 :(得分:2)
printf()的第一个参数是一个const char *,(一个指向const char数组的指针),而printf(foo())
你试图使用指向地址10的指针,这显然是该程序的范围,导致它无法正常工作。但是,使用printf("%d", one)
,您告诉printf打印出一个可以正常工作的数字。
答案 1 :(得分:2)
以下程序的输出为1010
。我用gcc -Wall -std=c99 main.c -o main.exe
编译它所以,我认为这是你的编译器问题,或者你声称printf("%d", one);
打印零时你错了。
#include <stdio.h>
int foo(void);
int main()
{
int one = 0;
one = foo();
printf("%d", one);
printf("%d", foo());
return 0;
}
int foo()
{
return 10;
}
答案 2 :(得分:1)
C函数不是数学中的“函数”(或函数编程中的函数)。
它只是获得返回值所需的一系列动作,这意味着该功能可能会产生副作用。
所以想想你的例子 - 如果foo()看起来像这样:
int foo()
{
printf("some text");
return 10;
}
换句话说,如果你使用带有返回值的变量 - 你只需要使用值,但是如果使用函数调用,你可以进行获取值所需的所有计算。