【问题标题】:Role of return in C functions, does it return the value of the variable called?C函数中return的作用,是否返回被调用变量的值?
【发布时间】:2021-10-18 17:42:25
【问题描述】:

经过一番研究,由于 K & R 的“C 编程语言”第 1.7 章中的例子不是很清楚,我了解到return 通常出现在每个函数的末尾,标志着它的结束; 貌似默认情况下return的值是0,表示函数执行成功(究竟是什么意思?)。 如果我们将 return 的值设置为我们调用的变量会发生什么? 例如,如果我要写:

return p;

这是否意味着函数的最终值将是p? 例如,如果我从main() 或其他函数调用此函数,则此函数在main() 中的值是否为p

例子:

#include <stdio.h>

int power(int m, int n);
/* test power function */
int main(){
    
    int i;
    for(i = 0; i < 10; ++i)
        printf("%d %2d %3d", i, power(2,i), power(-3,i));
    return 0;
    }


int power(int base, int n)
{
    int i, p;
    p=1;

    for(i=1;i<=n;++i)
        p=p*base;

    return p;
}

这是否意味着当我在 main 中调用 power() 时,它的值是 p

【问题讨论】:

  • 你有没有尝试编译代码看看会发生什么?
  • 我认为你很困惑,因为main 函数的规则与其他所有函数不同。因此,当您阅读该部分时,需要注意将讨论main 的段落与讨论其他功能的段落分开。比如语句“好像默认情况下return的值为0” 只适用于main。其他任何功能都不是这样。
  • 返回的不是变量p。它是 p 持有的值的副本。 p 是一个局部变量,所以它在重新上电后就消失了。
  • 是的,事情就是这样,有几个元素我不清楚,所以是的@klutt,我尝试了代码,但我不明白它是怎么做的,我做了一些尝试用更简单的方法模拟它,但我失败了,所以我不明白它是如何工作的。我还认为参数是本地的,它们的名称是纯粹形式的,所以我不能翻译成一种人类语言,比如说p = p * base,我的意思是,base 应该在那里的值是多少?这本书没有明确地说,我不能肯定地假设,因为它很清楚
  • 参数n也是如此,我会说它是不确定的,所以它是一个巨大的数字,但我不敢假设它,毕竟我只是初学者,所以我认为,应该说清楚。

标签: c kernighan-and-ritchie


【解决方案1】:

power返回的值就是p的值。

我们可以简称为“power返回p”,但返回的是p的值。


函数没有值;函数返回一个值。

p 不是一个值; p 是一个变量。

power 返回的值是p 在评估return p 时的值。所以如果p的值为8,则返回的值为8

上述程序将返回值传递给printf进行打印。


好像默认情况下return的值是0

函数没有默认返回值。如果函数的返回类型不是void,则必须使用return

main 是唯一的例外。 return 0main 的默认值。

【讨论】:

  • 谢谢,这是针对具体问题的答案,但我也可以问你,basen 的值是什么?我知道这是函数的局部变量,但我会说它们没有特定值,这是否意味着它们是无限的(从数学极限的角度来看)?
  • 这取决于提供的参数。如果调用是power(2, 4),那么base 的值为2n 的值为4
  • 变量可能具有“没有特定值”。它被称为未初始化。而且你不能读取这些变量的值。错误代码示例:int x; printf("%d\n", x); 修正:int x; x=3; printf("%d\n", x);
  • 哦,哇,现在终于明白了,谢谢! @ikegami
猜你喜欢
  • 2014-05-10
  • 1970-01-01
  • 2015-06-26
  • 1970-01-01
  • 1970-01-01
  • 2020-01-18
  • 1970-01-01
  • 2019-01-06
  • 2021-01-07
相关资源
最近更新 更多