C++入门【16-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 = 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

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

相关推荐

  1. C++入门16-C++ 函数返回数组

    2023-12-27 08:46:03       34 阅读
  2. C++入门【25-C++ 函数返回指针】

    2023-12-27 08:46:03       39 阅读
  3. C 函数返回指针

    2023-12-27 08:46:03       14 阅读
  4. C++入门11-C++ 数字

    2023-12-27 08:46:03       33 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-27 08:46:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-27 08:46:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-27 08:46:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-27 08:46:03       20 阅读

热门阅读

  1. Ansible的变量

    2023-12-27 08:46:03       36 阅读
  2. 【EasyExcel】使用技巧

    2023-12-27 08:46:03       38 阅读
  3. Mybatis-Plus基础之Mapper的映射规则

    2023-12-27 08:46:03       31 阅读
  4. C++设计模式:单例模式(饿汉式、懒汉式)

    2023-12-27 08:46:03       40 阅读
  5. 【数据库】postgressql设置数据库执行超时时间

    2023-12-27 08:46:03       38 阅读
  6. 黑客常用端口利用总结

    2023-12-27 08:46:03       32 阅读
  7. python之列表动态生成和重复数据处理

    2023-12-27 08:46:03       41 阅读
  8. VSCode 加Cortex-Debug嵌入式调试方法

    2023-12-27 08:46:03       35 阅读
  9. codeforces 1904B

    2023-12-27 08:46:03       43 阅读
  10. 单例模式你了解嘛?

    2023-12-27 08:46:03       30 阅读