C ++函数返回数组 [英] C++ functions returning arrays
问题描述
我是那种新的C ++。我习惯了在Java编程。这种特殊的问题是引起了我很大的问题,因为C ++不是演戏像Java,当它在处理数组。在C ++中,数组只是指针。
I am sort of new to C++. I am used to programming in Java. This particular problem is causing me great issues, because C++ is not acting like Java when it is dealing with Arrays. In C++, arrays are just pointers.
但是为什么这code:
But why does this code:
#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核实也许这事做与数组作为指针真正处理方式。任意值
print out arbitrary values for verify 2 and verify 3. Perhaps this has something to do with the way arrays are really handled as pointers.
推荐答案
由于您的阵列堆栈中分配。移动从Java到C ++,你必须非常小心对象的生命周期。在Java中,一切都是堆中分配,当对它的引用仍然是垃圾回收。
Because your array is stack allocated. Moving from Java to C++, you have to be very careful about the lifetime of objects. In Java, everything is heap allocated and is garbage collected when no references to it remain.
然而在这里,你定义一个堆栈中分配数组,当你退出功能其中的getArray被销毁。这是的(很多)的原因矢量preferred平淡阵列一 - 。他们处理的分配和释放你
Here however, you define a stack allocated array a, which is destroyed when you exit the function getArray. This is one of the (many) reasons vectors are preferred to plain arrays - they handle allocation and deallocation for you.
#include <vector>
std::vector<int> getArray()
{
std::vector<int> a = {1, 2, 3};
return a;
}
这篇关于C ++函数返回数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!