整数数组返回类型

时间:2015-01-11 04:07:08

标签: c++ c return-type

我想知道我是否可以使函数返回一个整数数组。我尝试了这样的代码:

int function[](){
    code;
}

我尝试过这样的代码:

int[] function(){
    code;
}

都没有工作。有什么建议?

5 个答案:

答案 0 :(得分:2)

如果已知阵列的大小,您可以尝试std::array<int, N>。在其他情况下,请改用std::vector<int>

答案 1 :(得分:1)

<强>解决方案:

#include <iostream>
#include <vector>

void print_vec(int arr[])
{
    std::vector<int> vec;
    vec.insert(vec.begin(), arr, arr+3);
    for (auto x: vec) {
         std::cout << ' ' << x;
    }
    std::cout << '\n';
}

int main ()
{
    int arr[] = { 501,502,503 };
    print_vec(arr);
}

Output:

501 502 503

链接到编译器 - &gt; Compiler Link

答案 2 :(得分:0)

试试这个: -

int* function ()
{}

但是不要忘记,调用函数现在负责该数组,即删除该数组。

答案 3 :(得分:0)

如果在堆上使用new运算符创建了该数组,则可以返回指向数组的指针。像这样:

int* get_an_array(int array_size)
{
   int arr = new int[array_size];

   return arr;
}

请记住,您将负责稍后删除该数组。

注1:
您不能返回指向本地创建的数组(放在堆栈上)的指针。例如:

int* get_an_array(int array_size)
{
   int arr[array_size];

   return arr;
}

退出函数后,该数组将被销毁。

注2:
考虑使用STL向量而不是数组。使用STL向量:1)在调用函数之前,您不需要知道元素的数量。 2)您不需要动态创建数组。 (通过值返回向量通常很快,因为编译器利用了复制省略(RVO))。

答案 4 :(得分:0)

#include <stdio.h>

int *func1(int year){
    static int array[][13] = {
        {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
        {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
    };
    return array[year % 4 == 0 && year % 100 != 0 || year % 400 == 0];
}
int (*func2(int year))[13]{
    static int array[][13] = {
        {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
        {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
    };
    return &array[year % 4 == 0 && year % 100 != 0 || year % 400 == 0];
}

int main(void){
    int *p1 = func1(2000);
    int (*p2)[13] = func2(2000);

    printf("%d\n", p1[2]);
    printf("%d\n", (*p2)[2]);

    return 0;
}