我试图从C中的函数返回2D整数数组。我能够使用malloc()使用动态内存分配来返回2D整数数组,但我无法理解如何使用static关键字来做到这一点。
下面是使用static关键字成功返回2D数组的代码段,
int (*(get_2d_arr_using_static)())[10] // Can someone explain me this statement in detail ?
{
static int arr[10][10] = { { 1,2,3}, {4,5,6}, {7,8,9}};
return arr;
}
int main()
{
int (*arr)[10] = get_2d_arr_using_static(); // Need some insights on this statement too
printf("Result ( x: 3, y =3 ): \n");
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
printf(" %d", arr[i][j]);
}
printf("\n");
}
}
我需要对已注释的声明进行一些解释。
我试图从C中的函数返回2D整数数组。
有问题。函数无法在C中返回数组。
但是您可以返回指针,并且指针可能指向数组的元素。
该数组可以动态或静态分配。返回指向函数内声明的自动数组的指针将毫无意义,因为该数组的生命周期在超出范围时结束,因此您将返回一个悬空的指针。
int (*(get_2d_arr_using_static)())[10] // Can someone explain me this statement in detail ?
这将声明一个返回指向10个整数的数组的指针的函数。
应该注意,int [10] [10]是10个整数的10个数组的数组。因此,该数组的元素是10个整数的数组,并且该函数返回指向该元素的指针。
int (*arr)[10] = get_2d_arr_using_static(); // Need some insights on this statement too
这将调用该函数并初始化一个指向10个整数的数组的指针。
也可以通过复制但间接返回数组。可以通过将数组包装在struct中来实现:
struct wrapper {
int arr[10][10];
};
struct wrapper foo(void) {
struct wrapper w;
// fill the array or something
return w;
}
自从您标记了C ++,我将提到C ++标准库为此类包装器类提供了一个模板:std::array
。