C++入门【16-C++ 从函数返回数组】

2023-12-26 22:21:04

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

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

文章来源:https://blog.csdn.net/zxm528/article/details/135231053
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。