【发布时间】:2015-06-17 00:50:02
【问题描述】:
这样的函数原型在 C 中有效吗?
int (*func())[*];
如果是,我该如何定义这样的函数?
【问题讨论】:
-
大多数时候,如果你想返回一个指向数组的指针,你真正想做的就是返回一个指向数组第一个元素的指针。使用指向第一个元素的指针,您可以通过
p[5]获取第 5 个元素;使用指向整个数组的指针,您需要执行p[0][5]或(*p)[5]。 -
用
[]替换[*]应该足够了 -
原型与问题有什么关系?看起来您正在尝试声明一个函数指针数组,但这不是问题所在。你想做什么?
-
@harald:这是一种尝试声明一个函数,该函数返回一个指向可变长度整数数组的指针。类似的语法 (
int (*func())[5]) 适用于声明一个返回指向固定大小数组的指针的函数。 -
禁止指向 VLA 的部分可能是 6.7.6.2 §2:如果标识符被声明为具有可变修改类型,则它应 [...] 具有任一块范围或函数原型范围。;不知道有没有更合适的
标签: c arrays pointers language-lawyer c11