这听起来很简单,我已经看到过使用向量代替答案的问题,但是我无法做到这一点,所以寻求帮助...
如果我想这样做,return2dArray()的函数签名应该是什么?请注意,我不能使用向量。确实必须是int [] []。 谢谢!
int* return2dArray()
{
static int a[2][2] = {{1, 2}, {4, 5}};
return a;
}
int main()
{
auto x = return2dArray();
for (int y = 0; y < 3 ; y++)
{
std::cout << "y is = " << x[y] <<std::endl;
}
}
答案 0 :(得分:3)
如果要将返回的指针当作指向简单的1D数组的方式来对待,我建议只使用一个1D数组。
// int* return2dArray()
int* return1dArray()
{
static int a[4] = {1, 2, 4, 5};
return a;
}
对此的一种改进是使用std::array
。
#include <iostream>
#include <array>
std::array<int, 4>& return1DArray()
{
static std::array<int, 4> a = {1, 2, 4, 5};
return a;
}
int main()
{
auto x = return1dArray();
for (size_t i = 0; i < x.size() ; i++)
{
std::cout << "x[" << i << "] is = " << x[i] << std::endl;
}
// Iterate using the range-for loop.
for ( auto e : x )
{
std::cout << "e is = " << e << std::endl;
}
}
std::array
比内置数组更可取,因为您获得了size()
成员函数而不会增加运行时间。如果要遍历数组的对象,也可以使用begin()
和end()
函数。
答案 1 :(得分:2)
一种可能性是int (f)()[2][2]
cdecl
或简单地int f()[2][2]
如果要省略一个或两个维度,则应返回具有或更佳尺寸spanpack
或vector
的指针。
答案 2 :(得分:2)
您可以将指针返回2d数组的开头,因为内存中的元素彼此相邻。
int* return2dArray()
{
static int a[2][2] = {{1, 2}, {4, 5}};
return &a[0][0];
}
int main()
{
auto x = return2dArray();
for (int y = 0; y < 4 ; y++)
{
cout << "y is = " << x[y] << endl;
}
}
尝试here