我是 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/