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

Can I Return an non-argument variable?

本文关键字:参数 变量 一个 返回 我可以      更新时间:2023-10-16

是否有可能从函数返回一个变量,而不将其作为参数传递?例如:

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

同样,当我回到我的主函数时,我将如何使用它?

对于像c++这样的语言来说,这是非常基本的,考虑通过挑选一本好书来帮助自己:
c++图书指南和列表


是否有可能从函数返回一个变量,而不将其作为参数传递?

它完全有效。你为什么认为不是呢?
按值返回函数的局部变量是合法的。将变量的副本返回给调用者。
你不应该返回局部变量的地址,因为局部变量只存在于定义它的作用域中。

应该避免什么?

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

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

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

这是合法的

复制变量z 的内容

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

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

您可以返回一个非参数变量。下面给出的代码可以。

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

因为在这种情况下,您返回的值是基本类型,如int。但是在复杂的情况下,当你返回一个变量的地址时,它已经用一种天才的方式解释了。

现在在main

中使用这个变量
int main(){
  int ret = example(4,5);
  //do whatever with ret..
}

您的示例非常好。你返回的是一个离散值,这是允许的。在底层发生的事情是,你能够从一个函数返回一个值在芯片的寄存器之一。为了清楚起见,不要光顾寄存器,通常是32/64位值,具体取决于操作系统。

当处理核心类型,如int, bool, float时,这些类型存储在寄存器中,因此您可以毫无顾虑地返回。

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

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

。像这样的事情是不好的,并且会在堆栈被覆盖时导致问题(除非这是你的意图:))。

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