返回并操作C中的返回值

时间:2011-04-10 17:36:50

标签: c pointers c99

我很难理解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; 
}

我似乎无法阐明为什么会有差异,以及为什么一个人不会在另一个人身上工作。

谢谢!

3 个答案:

答案 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; 
}

换句话说,如果你使用带有返回值的变量 - 你只需要使用值,但是如果使用函数调用,你可以进行获取值所需的所有计算。