我想知道我是否可以使函数返回一个整数数组。我尝试了这样的代码:
int function[](){
code;
}
我尝试过这样的代码:
int[] function(){
code;
}
都没有工作。有什么建议?
答案 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;
}