使用C中的静态关键字返回2D数组

问题描述 投票:0回答:1

我试图从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++ c arrays static
1个回答
0
投票

我试图从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

© www.soinside.com 2019 - 2024. All rights reserved.