提问者:小点点

在C++中如何从函数返回数组


我想用C++做一个简单的函数来练习一下。它应该做与python中的range()函数相同的事情,但现在要简单得多。我遇到了一个问题,数组没有正确地从函数返回到主函数。我曾经在下面编码,得到了一个奇怪的错误。有人知道问题出在哪里吗?

#include "iostream"

int * range(int max){
    int n = 0;
    int ran [max] ;
    while (n < max){
        ran[n] = n;
        n += 1;
    }
    return ran;
}

int main(){
    int * ranger;
    ranger = range(5);
    for(int k  = 0; k < 5; k++){
        std::cout << ranger[k] << " ";
    }
    return 0;
}

共2个答案

匿名用户

尝试将数组作为引用传递,而不是返回它。

#include "iostream"

void range(int max, int* ranger){
    int n = 0;
    while (n < max){
        ranger[n] = n;
        n += 1;
    }
 
}

int main(){
    int * ranger;
    ranger = new int[5];
    range(5, ranger);
    for(int k  = 0; k < 5; k++){
        std::cout << ranger[k] << " ";
    }
    return 0;
}

匿名用户

在C++中如何从函数返回数组

在C++中不能从函数返回数组。

但是,您可以返回class对象,并且class可以包含数组作为成员。这样,通过在类中包装数组并返回该类的实例,您就可以绕过限制。标准库中有一个此类数组包装器的通用模板。它称为std::array

int * range(int max){
    int n = 0;
    int ran [max] ;

数组变量的大小必须是C++中的编译时常数。函数参数不是编译时间常数。因此,这个程序是错误的。

若要创建动态大小的数组,必须动态分配它。创建动态数组的最简单、最方便的方法是使用std:vector

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c++|中|函数|返回|数组)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?