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;
}
这个函数被声明为一个数组,任何人都可以解释这种类型的声明。
函数输出是打印由名为。
的函数返回的数组答案 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数组的指针。