如何从C++函数返回本地数组

如何从C++函数返回本地数组

在这里,我们将构建一个C++程序,以从函数返回本地数组。并将使用三种方法正确方式返回数组的方法,即:

  1. 使用 动态分配的数组
  2. 使用 静态数组
  3. 使用 结构
// C++从函数返回本地数组的程序,其中违反了一些规则 include <iostream> using namespace std;

int* fun() { int arr [100];

//对arr[]进行一些操作 arr[0]=10; arr[1]=20; 返回arr;}

int main() { int *ptr=fun ();

cout<<ptr[0] <<" "<<ptr[1]
    ; 返回0;}

警告:

在函数'int *fun()'中:
6:8:警告:返回本地变量'arr'的地址[-Wreturn-local-addr]

上面的程序是 错误的 。它可能产生10或20的值作为输出,也可能产生垃圾值或会崩溃。问题在于,我们返回一个本地变量的地址,这是不被建议的,因为本地变量在函数调用结束后可能不存在于内存中。

以下是一些返回数组的正确方法

如何从C++函数返回本地数组

1.使用动态分配的数组

动态分配的内存(使用new或malloc()分配)保留到我们使用delete或free()删除为止。因此我们可以创建一个动态分配的数组,并在函数退出时删除它。

示例:

// C++在函数中演示从动态分配数组返回本地数组 # include <iostream> using namespace std;

int* fun() { int* arr=new int[100];

//对arr[]进行一些操作 arr[0]=10; arr [1]=20;

返回arr;
}

int main() { int *ptr=fun ();

cout<<ptr[0] <<" "<<ptr[1];
//分配的内存必须删除 delete[] ptr;

返回 0;}

输出

10 20

2.使用静态数组

静态变量的生命周期是整个程序。因此我们始终可以创建一个本地静态数组并返回它。

示例:

//C++演示从静态数组中的函数返回本地数组 # include <iostream> using namespace std;

int* fun() { static int arr[100];

//对arr[]进行一些操作 arr[0]=10; arr[1]=20;

返回arr;
}

int main() { int *ptr=fun ();

cout<<ptr[0] <<" "<<ptr[1];

返回 0;}

输出

10 20

3.使用结构

我们可以将数组包装在结构/类中并返回结构/类的实例。这项工作的原因是,结构体/类的成员数组是深度复制的。在下面的程序中,当我们返回的实例在main中被复制时,就会发生深层复制。

示例:

// C++程序:演示从函数中使用Struct返回本地数组
#include <iostream>
using namespace std;
 
struct arrWrap {
    int arr[100];
};
 
struct arrWrap fun()
{
    struct arrWrap x;
 
    x.arr[0] = 10;
    x.arr[1] = 20;
 
    return x;
}
 
int main()
{
    struct arrWrap x = fun();
    cout << x.arr[0] << " " << x.arr[1];
    return 0;
}  

输出

10 20

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程