从c++中的函数返回数组

returning array from function in c++

本文关键字:返回 数组 函数 c++      更新时间:2023-10-16

这是我的程序,用于从c++中的函数返回数组

#include <iostream>
using namespace std;
int *pTest(){
    static int a[] = {2,3,4,6,9};
    return a;
}
int main(){
    int *x;
    x = pTest();
    while(*x != NULL){
        cout << *x++ << "  ";
    }
}

根据我的说法,输出应该是2 3 4 6 9
但在我的机器上输出是2 3 4 6 9 1
为什么在输出中存在额外的CCD_ 3
我使用的是codeblocks,gcc 4.8.1

数组不是零终止的,因此循环while (*x != NULL)将继续读取数组之外的内容,直到它找到零值字、崩溃或导致其他未定义的行为。

您需要向数组中添加一个终止符(如果您可以选择一个值,可能是零,它将不是有效的数组元素),或者以其他方式返回长度。

您可以使用计数并获取数组的大小。像这样:

int k = 0;
while(k <= sizeof(x)){
    cout  << "  "<< *x++;
    k++;
}

使用std::vector,您的函数将是:

std::vector<int> ptest() {
    static const int a[] = {2,3,4,6,9};
    std::vector<int> vec (a, a + sizeof(a) / sizeof(a[0]) );
    return vec;
}