以下代码中的“int(* get_2d_array(void))[3]”函数声明是什么意思?

时间:2017-10-01 18:22:22

标签: c multidimensional-array

int (*get_2d_array(void))[3]    //This Function
{
    static int arr[2][3] = { 10, 20, 30, 40, 50, 60 };
    return arr;
}


int main()
{

int i, j, row = 2, col = 3;
int (*ptr)[col];

ptr = get_2d_array();

for( i = 0; i < row; i++ )
{
    for( j = 0; j < col; j++ )
    {
        printf("%d ",ptr[i][j]);
    }
    printf("\n");
} 
    return 0;
}

这个函数被声明为一个数组,任何人都可以解释这种类型的声明。

函数输出是打印由名为。

的函数返回的数组

2 个答案:

答案 0 :(得分:2)

函数返回一个指向int的大小为3的数组的指针。

您可以在将来使用https://cdecl.org等解决方案进行翻译。

但是,我找到了一种允许在不使用外部工具的情况下“翻译”的方法。你开始用标识符阅读,然后向右移动,当你遇到一个闭合支撑时,你会“反弹”。

使用您的功能,它的工作原理如下:

  • 您从标识符get_2d_array开始,因此我们“get_2d_array是......”

  • 当我们有(void)时,我们向右移动,所以它看起来像一个函数声明:“get_2d_array是一个不带参数并返回的函数......”

  • 我们向右移动,遇到不平衡的右大括号,所以我们反弹并发现一个星号,表示一个指针;因此,我们“get_2d_array是一个不带参数的函数,并返回一个指向...的函数。”

  • 好的,再次向右我们遇到[3],所以我们将它插入到我们的句子中:“get_2d_array是一个不带参数的函数,并返回一个指向大小为3的数组的指针的......“

  • 我们没有解释的最后一件事是开头的'int',所以我们最后:“get_2d_array是一个不带参数的函数,并返回一个指向大小数组的指针3 int

答案 1 :(得分:0)

int (*get_2d_array(void))[3]不带参数(void)并返回指向第二维(“列”)中包含3个元素的int数组的指针。