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 = 0 ; i < 10 ; ++ i ) r [ i ] = rand ( ) ; cout << r [ i ] << endl ; return r ; // 要调用上面定义函数的主函数 int main ( ) // 一个指向整数的指针 int * p ; p = getRandom ( ) ; for ( int i = 0 ; i < 10 ; i ++ ) cout << " *(p + " << i << " ) : " ; cout << * ( p + i ) << endl ; return 0 ;

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

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 [ 0 ] = 1 ;
myArray [ 1 ] = 2 ;
myArray [ 2 ] = 3 ;
return myArray ;
int main ( )
int * result = myFunction ( ) ;
// 使用 result
delete [ ] result ;
return 0 ;

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

#include <iostream>
using namespace std ;
int * createArray ( int size ) {
int * arr = new int [ size ] ;
for ( int i = 0 ; i < size ; i ++ ) {
arr [ i ] = i + 1 ;
return arr ;
int main ( ) {
int * myArray = createArray ( 5 ) ;
for ( int i = 0 ; i < 5 ; i ++ ) {
cout << myArray [ i ] << " " ;
cout << endl ;
delete [ ] myArray ; // 释放内存
return 0 ;

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

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

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

1 2 3 4 5 

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

C++ 数组 C++ 数组

  • #0
  •