C++ 从函数返回数组

C++ 数组 C++ 数组

C++ 不允许返回一个完整的数组作为函数的参数。但是,您可以通过指定不带索引的数组名来返回一个指向数组的指针。

如果您想要从函数返回一个一维数组,您必须声明一个返回指针的函数,如下:

int * myFunction ( ) { //. . . }

如下实例:

实例

int * myFunction ( )
{
    int myArray [ 3 ] = { 1 , 2 , 3 } ;
    return myArray ;
}

注意: 你不能简单地返回指向局部数组的指针,因为当函数结束时,局部数组将被销毁,指向它的指针将变得无效。

C++ 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量。

为了避免以上情况,你可以使用静态数组或者动态分配数组。

使用静态数组需要在函数内部创建一个静态数组,并将其地址返回,例如:

int * myFunction ( )
{
    static int myArray [ 3 ] = { 1 , 2 , 3 } ;
    return myArray ;
}

现在,让我们来看下面的函数,它会生成 10 个随机数,并使用数组来返回它们,具体如下:

实例

#include < iostream > #include < cstdlib > #include < ctime > using namespace std ; // 要生成和返回随机数的函数 int * getRandom ( ) { static int r [ 10 ] ; // 设置种子 srand ( ( unsigned ) time ( NULL ) ) ; for ( int i = ; i < 10 ; ++ i ) { r [ i ] = rand ( ) ; cout << r [ i ] << endl ; } return r ; } // 要调用上面定义函数的主函数 int main ( ) { // 一个指向整数的指针 int * p ; p = getRandom ( ) ; for ( int i = ; i < 10 ; i ++ ) { cout << " *(p + " << i << " ) : " ; cout << * ( p + i ) << endl ; } return ; }

当上面的代码被编译和执行时,它会产生下列结果:

									624723190
1468735695
807113585
976495677
613357504
1377296355
1530315259
1778906708
1820354158
667126415
*(p + 0) : 624723190
*(p + 1) : 1468735695
*(p + 2) : 807113585
*(p + 3) : 976495677
*(p + 4) : 613357504
*(p + 5) : 1377296355
*(p + 6) : 1530315259
*(p + 7) : 1778906708
*(p + 8) : 1820354158
*(p + 9) : 667126415
								

使用动态分配数组需要在函数内部使用 new 运算符来分配一个数组,并在函数结束时使用 delete 运算符释放该数组,例如:

实例

int * myFunction ( )
{
    int * myArray = new int [ 3 ] ;
   myArray [ ] = 1 ;
   myArray [ 1 ] = 2 ;
   myArray [ 2 ] = 3 ;
    return myArray ;
}

int main ( )
{
    int * result = myFunction ( ) ;
    // 使用 result
    delete [ ] result ;
    return ;
}

以下是一个简单的应用实例,演示了如何从函数中返回数组:

实例

#include <iostream>
using namespace std ;

int * createArray ( int size ) {
    int * arr = new int [ size ] ;
    for ( int i = ; i < size ; i ++ ) {
        arr [ i ] = i + 1 ;
    }
    return arr ;
}

int main ( ) {
    int * myArray = createArray ( 5 ) ;
    for ( int i = ; i < 5 ; i ++ ) {
        cout << myArray [ i ] << " " ;
    }
    cout << endl ;
    delete [ ] myArray ; // 释放内存
    return ;
}

在上面的例子中,我们声明了一个名为 createArray 的函数,它接受一个整数参数 size,并返回一个由整数填充的整数数组。我们使用 new 运算符在堆上动态分配了一个数组,并在函数内部填充了数组。最后,函数返回了指向数组的指针。

在 main 函数中,我们调用了 createArray 函数,并将返回的数组指针存储在 myArray 中。然后我们遍历了数组并打印了每个元素的值。最后,我们使用 delete[] 运算符释放了 myArray 所占用的内存,以避免内存泄漏。

当上面的代码被编译和执行时,它会产生下列结果:

									1 2 3 4 5
								

注意: 当使用动态分配数组时,调用函数的代码负责释放返回的数组。这是因为在函数内部分配的数组在函数结束时不会自动释放。

C++ 数组 C++ 数组