我可以返回一个非参数变量吗?

时间:2013-01-03 11:53:22

标签: c++

是否可以从函数返回变量而不将其作为参数传递?例如:

int example(int x, int y) {
    int z = x + y;
    return z
}

另外,当我回到主函数时,我将如何使用它?

4 个答案:

答案 0 :(得分:2)

对于像C ++这样的语言来说,这是非常基础的,考虑通过阅读一本好书来帮助自己: The Definitive C++ Book Guide and List


  

是否可以从函数返回变量而不将其作为参数传递?

完全有效。为什么你认为不是? 按值返回函数local是合法的。变量的副本将返回给调用者 您不应该做的是返回局部变量的地址,因为局部变量仅存在于定义它的范围内。

  

应该避免什么?

int* example(int x, int y) 
{
    int z = x + y;
    return &z;
}
  

当我回到我的主要功能时,我将如何使用它?

int main()
{
    std::cout<<example(4,5);
    return 0;
}

答案 1 :(得分:2)

这是合法的。

变量z 的内容被复制

int iElsewhere = 0;
iElsewhere = example(1, 2); // now iElsewhere == 3

正如Kamil Klimek的评论所述,您应该开始阅读C ++小教程或介绍,因为这个问题非常基本的 C / C ++。

答案 2 :(得分:0)

你可以返回一个非参数变量..下面给出的代码很好。

int example(int x, int y) {
    int z = x + y;
    return z;
}

因为在这种情况下,您返回的值是基本类型,如int。但是有一些复杂的情况,当你返回变量的地址时,它是天才的already explained

现在在主

中使用该变量
int main(){
  int ret = example(4,5);

  //do whatever with ret..
}

答案 3 :(得分:0)

你的榜样非常好。您将返回允许的离散值。发生了什么事情,你可以从一个函数返回一个芯片寄存器中的值。为了清楚起见而不是光顾寄存器通常是32/64位值,具体取决于操作系统。

当处理核心类型(如int,bools,floats)时,它们存储在寄存器中,因此您可以毫无后顾之忧地返回它。

您可以返回的其他类型的信息是指向某个内存的地址的指针。当你这样做时,返回值又是一个32/64位指针,它只是数据的地址。

在执行操作时需要注意的是确保在函数中完成的任何已分配内存是通过malloc或new(分别使用C或C ++时)完成的,而不仅仅是方法中声明的结构。

E.g。这样的事情很糟糕,并且会因为堆栈被覆盖而导致问题(除非你的意图是:) :)。

void * myfunction() {     MYSTRUCT muylocalstructure;     void * mypointer =&amp; mylocalstructure;     返回mypointer; }