C++ 函数返回数组

标签 c++ arrays pointers return

我是 C++ 的新手。我习惯用Java编程。这个特殊问题给我带来了很大的问题,因为 C++ 在处理数组时不像 Java。在 C++ 中,数组只是指针。

但是为什么这段代码:

#include <iostream>
#define SIZE 3
using namespace std;

void printArray(int*, int);
int * getArray();
int ctr = 0;

int main() {
  int * array = getArray();

  cout << endl << "Verifying 2" << endl;
  for (ctr = 0; ctr < SIZE; ctr++)
    cout << array[ctr] << endl;

  printArray(array, SIZE);
  return 0;
}

int * getArray() {
  int a[] = {1, 2, 3};
  cout << endl << "Verifying 1" << endl;
  for (ctr = 0; ctr < SIZE; ctr++)
    cout << a[ctr] << endl;
  return a;
}

void printArray(int array[], int sizer) {
  cout << endl << "Verifying 3" << endl;
  int ctr = 0;
  for (ctr = 0; ctr < sizer; ctr++) {
    cout << array[ctr] << endl;
  }
}

打印出验证 2 和验证 3 的任意值。也许这与数组真正作为指针处理的方式有关。

最佳答案

问题是你不能返回本地数组:

int a[] = {1, 2, 3};
...
return a;

无效。你需要复制a在返回之前进入动态内存。目前,自 a自动存储中分配,一旦函数返回,数组的内存就会被回收,从而使返回值无效。 Java 没有同样的问题,因为所有对象(包括数组)都在动态存储中分配。

更好的是,您应该避免使用数组,而应使用旨在替代它们的 C++ 类。在这种情况下,使用 std::vector<int>会是更好的选择。

关于C++ 函数返回数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12738762/

相关文章:

c++ - 在可移植 C++ 构造的引用上使用 "operator &"吗?

android - 对于 Android Studio NDK Gradle,如何为不同的文件设置不同的 cFlags?

arrays - Lua中如何迭代表?

c++ - 访问全局和命名空间变量

javascript - Internet Explorer 上 Array.from 的替代方案或 polyfill

c# - 将 'New' 数组从 VB.Net 转换为 C#

java - 新创建的对象是否给我内存位置或保存新分配的内存位置地址的指针

c 内存分配

C++ 从另一个类调用( vector )指针返回空大小

c++ - Boost Variant 是否提供与 std 的 holds_alternative 类似的功能?