带参数的函数调用在C中是如何工作的?
我正在学习C语言,遇到了一些我很好奇的事情。对我来说,像下面这样在main中调用foo不会返回任何结果:带参数的函数调用在C中是如何工作的?,c,function,return-value,function-parameter,C,Function,Return Value,Function Parameter,我正在学习C语言,遇到了一些我很好奇的事情。对我来说,像下面这样在main中调用foo不会返回任何结果: int foo(bar){ return bar * 2; } int main(){ foo(10); } 只有当我使用printf格式化输出时,它才会将结果从foo返回到main。这是故意的还是我遗漏了什么?以下示例有效: int foo(bar){ return bar * 2; } int main(){ // will return 20
int foo(bar){
return bar * 2;
}
int main(){
foo(10);
}
只有当我使用printf格式化输出时,它才会将结果从foo返回到main。这是故意的还是我遗漏了什么?以下示例有效:
int foo(bar){
return bar * 2;
}
int main(){
// will return 20
printf("%d\n", foo(10));
}
中的函数调用foo(10)
intfoo(bar){
返回条*2;
}
int main(){
傅(10),;
}
确实返回值。但是您没有在任何变量中捕获它,也没有打印返回值。第二个示例实际打印了从foo(10)返回的值代码>中的函数调用foo(10)
intfoo(bar){
返回条*2;
}
int main(){
傅(10),;
}
确实返回值。但是您没有在任何变量中捕获它,也没有打印返回值。第二个示例实际打印了从foo(10)返回的值代码>已经有了一个有用的答案,所以这里有一个更专业的答案:
在第二个示例中,您打印了foo(10)
的结果,但是有一种方法可以真正从C程序返回值
int main() {
return 14;
}
在shell中运行脚本后,echo$?
(或Windows上的echo%errorlevel%
)将立即打印程序的退出代码,对于简单的C程序,它是main
返回的值
通常,值0表示成功,其他任何值都表示某个错误或其他错误。生成退出代码的另一种常见方法是将整数(或常量exit_SUCCESS
或exit_FAILURE
)从stdlib.h
传递到exit
函数
(当然,您通常希望打印程序的结果,或将其写入文件,以便以后查看或保存,但这是一种可能有用的区别,即使它不经常出现。)已经有了一个有用的答案,因此这里有一个更技术性的答案:
在第二个示例中,您打印了foo(10)
的结果,但是有一种方法可以真正从C程序返回值
int main() {
return 14;
}
在shell中运行脚本后,echo$?
(或Windows上的echo%errorlevel%
)将立即打印程序的退出代码,对于简单的C程序,它是main
返回的值
通常,值0表示成功,其他任何值都表示某个错误或其他错误。生成退出代码的另一种常见方法是将整数(或常量exit_SUCCESS
或exit_FAILURE
)从stdlib.h
传递到exit
函数
(当然,您通常希望打印程序的结果,或将其写入文件,以便以后查看或保存,但这是一种可能有用的区别,即使它不经常出现。)在第一个示例中,您忽略了foo()
的返回值。您不必使用它,但是在这种情况下,如果忽略函数的结果,调用函数是没有意义的。在第二个示例中,您将其返回值传递给printf()
。您能帮我将其哑一点吗?一般来说,我对编程非常陌生。在第一个例子中,我忽略了返回值是什么意思?我目前的印象是,“foo()”中返回的“bar”变量将被传递到函数的参数中。不是吗?你说foo()
不返回值,但它返回值。您可以使用,int-retval=foo(10)获取并报告该值;printf(“%d\n”,retval)代码>这是第二个更棘手的示例,因为您从未看到返回值,而是直接将其输入到printf
中。您的函数foo()
返回一个值。您需要在变量(另一个整数)中或通过函数“捕获”该值(就像您使用printf()
)。在第一个示例中,您没有对返回变量foo()
”执行任何操作。现在我明白了所有这些伟大的答案。谢谢在第一个示例中,您忽略了foo()
中的返回值。您不必使用它,但是在这种情况下,如果忽略函数的结果,调用函数是没有意义的。在第二个示例中,您将其返回值传递给printf()
。您能帮我将其哑一点吗?一般来说,我对编程非常陌生。在第一个例子中,我忽略了返回值是什么意思?我目前的印象是,“foo()”中返回的“bar”变量将被传递到函数的参数中。不是吗?你说foo()
不返回值,但它返回值。您可以使用,int-retval=foo(10)获取并报告该值;printf(“%d\n”,retval)代码>这是第二个更棘手的示例,因为您从未看到返回值,而是直接将其输入到printf
中。您的函数foo()
返回一个值。您需要在变量(另一个整数)中或通过函数“捕获”该值(就像您使用printf()
)。在第一个示例中,您没有对返回变量foo()
”执行任何操作。现在我明白了所有这些伟大的答案。谢谢我想我现在明白了。因此,函数正确地返回了值,但由于没有用于存储返回值的变量或用于打印返回值的printf语句,因此在程序执行时它永远不会出现?我想我现在明白了。因此,函数正确地返回了值,但由于没有用于存储返回值的变量,也没有用于打印返回值的printf语句,因此在程序执行时它永远不会显示?