c - 返回值的有用性不依赖于所有(仅按值调用)参数

标签 c function

我有一个问题:

int swapnum( int x, int y )
{
   int tempnum ;
   tempnum = x ;
   x = y ;
   y = tempnum ;
   return tempnum;

}
int swapnum(int, int);
int main( )
{
    int x = 35, y = 45 ;
    printf("Before swapping: %d, %d", x, y);
    swapnum(x, y);
    printf("\nAfter swapping: %d, %d", x, y);
    return 0;
}

我在互联网上找到了这个示例,它演示了按值调用的工作原理。我什么都明白,除了一件事。如果我们在 main 中没有得到改变的结果,我们需要按值调用什么呢?我理解了通过引用调用的想法;我们将收到更改后的结果,但是如果结果仅在本地更改(在此代码的上部)并且 main 保持不变(printf("\n交换后:%d, %d", x, y);)?如果您也编写示例来演示,那就太好了。

最佳答案

甚至有些函数不返回任何内容。 他们有一个原型(prototype),例如

void useTwoNums(int, int);

它们比您的示例更好地说明了没有必要返回任何内容,甚至更少以某种方式使用两个输入参数和/或依赖于它们的东西。

您似乎缺少的概念是数学上下文中的“函数”和编程中的“函数”之间的区别。在编程中,函数很可能会执行某些操作而不返回某些内容。一个例子是一个可以很好地打印输入值的函数,比较 printf(),
http://en.cppreference.com/w/c/io/fprintf 其返回值可以在无返回值函数内部进行处理来说明。

极端情况是一个既没有参数也没有返回值的函数:
void DoSomethingInFreespace(void);。类似的功能可以实现数据处理,例如通过其他输入 channel 。或者它们只是重构的代码片段,例如用于重用,具有足够丰富的上下文,例如全局或文件局部变量。

为了让答案更完整,我将整合评论中的一些观点(包括OP的观点,重点是返回值): 按值调用函数更接近数学函数,并且更容易组合。(Jean-Baptiste Yunès)。 和 它允许您发送值,而不必担心某些函数会更改它们。非常方便。(njzk2) 两者(以及其他人)都强调数学函数不会改变参数;这是程序员所赞赏的“ promise ”。

扭转局面: 当使用按值调用时,如果您希望更改[函数外部上下文中的值,例如] main,我们必须返回结果(OP)

不同角度:
当使用引用调用时,我们不需要返回;它[参数]本身发生变化[在被调用函数的上下文之外,并且可以用作]结果(OP)

关于c - 返回值的有用性不依赖于所有(仅按值调用)参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50383765/

相关文章:

Javascript Palindrome 函数逻辑写对了吗?

c - 面试Hello World讲解

c - 小段代码出现段错误(核心转储)错误

java - 给定乘数的下一个数字倍数

Javascript - 接受参数并返回包含 "x"的字符串的函数

javascript - bootbox 确认在 <form> 标签内时不工作

javascript - 与函数工厂和关闭作斗争

c - 如何在堆上创建可变长度数组?

c - 警告 : '0' flag ignored with precision and ‘%i’ gnu_printf format

c - 函数指针 - 将参数传递给函数指针