cha*_*umQ 2 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;
}
}
Run Code Online (Sandbox Code Playgroud)
打印出验证2的任意值并验证3.也许这与数组作为指针实际处理的方式有关.
问题是你不能返回本地数组:
int a[] = {1, 2, 3};
...
return a;
Run Code Online (Sandbox Code Playgroud)
是无效的.您需要a在返回之前复制到动态内存中.目前,由于a在自动存储中分配,因此只要函数返回,就会回收数组的内存,从而使返回的值无效.Java没有相同的问题,因为所有对象(包括数组)都在动态存储中分配.
更好的是,您应该避免使用数组来支持旨在替换它们的C++类.在这种情况下,使用a std::vector<int>将是更好的选择.
因为您的数组是堆栈分配的.从Java迁移到C++,您必须非常小心对象的生命周期.在Java中,所有内容都是堆分配的,并且在没有对其进行引用时进行垃圾回收.
但是,在这里,您定义了一个堆栈分配的数组a,当您退出函数getArray时会将其销毁.这是(很多)原因之一,矢量比普通数组更受欢迎 - 它们为您处理分配和释放.
#include <vector>
std::vector<int> getArray()
{
std::vector<int> a = {1, 2, 3};
return a;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19141 次 |
| 最近记录: |