我想返回指向 void
的指针数组。如何在函数原型(prototype)中指定它?
int*[] func();
最佳答案
函数不能返回数组类型。您可以返回指向数组第一个元素的指针(类型 void **
),也可以返回指向整个数组的指针(类型 void (*)[N]
)。注意,两者的地址值是一样的(数组首元素的地址也是数组的地址),只是类型不同而已。
要返回指向 void
指针的 SIZE 元素数组的指针,函数签名将是
void *(*func())[SIZE]
分解为
func -- func
func() -- is a function
*func() -- returning a pointer
(*func())[SIZE] -- to a SIZE-element array
*(*func())[SIZE] -- of pointer
void *(*func())[SIZE] -- to void.
请记住,[]
和 ()
等后缀运算符的优先级高于 *
等一元运算符,因此 * a[]
是指针数组,(*a)[]
是指向数组的指针。
对于 C89 及更早版本,SIZE 必须是编译时常量表达式。对于 C99,您可以使用变量表达式。
无论您做什么,都不要尝试返回指向函数本地数组的指针,例如
void *(*func())[SIZE]
{
void *foo[SIZE];
...
return &foo;
}
或
void **func()
{
void *foo[SIZE];
...
return foo;
}
一旦函数退出,foo
不复存在,返回的指针值不再指向任何有意义的地方。您要么必须在函数中将数组声明为 static
,要么必须动态分配它:
void *(*func())[SIZE]
{
void *(*foo)[SIZE] = malloc(sizeof *foo);
...
return foo;
}
或
void **func()
{
void **foo = malloc(sizeof *foo * SIZE);
...
return foo;
}
关于c - 如何指定指向 void 的指针数组的返回类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7224356/