这样的函数原型(prototype)在 C 中有效吗?
int (*func())[*];
如果是,我该如何定义这样的函数?
最佳答案
您应该返回一个指向不完整数组类型的指针,因为可变长度数组的 *
符号仅在参数列表中有效。
示例原型(prototype)和函数定义:
extern float (*first_row(unsigned, unsigned, float (*)[*][*]))[];
float (*first_row(unsigned n, unsigned m, float (*matrix)[n][m]))[]
{
return *matrix;
}
你会像这样调用它:
unsigned n = 3, m = 4;
float matrix[n][m];
float (*row)[m] = first_row(n, m, &matrix);
请注意,如果函数具有自动存储持续时间,则返回指向已在内声明的数组(可变长度或其他)的指针是未定义的行为。这意味着您只能返回指向作为参数传入或动态分配的可变长度数组的指针。
关于我可以返回指向 VLA 的指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29576038/