![](/img/trans.png)
[英]int* const* foo(int x); is a valid C function prototype. How do you “read” this return type?
[英]How do you use this: int (*x(int))[5]
int (*x(int))[5]
说 x 是一个 function,它接受一个int
参数,并返回一个指向 integer 5 元素数组的指针。
我还可以使用typedef
来简化 x:
typedef int Array[5];
typedef Array *Array_ptr;
typedef Array_ptr Array_ptr_fn(int);
我的问题是,如何使用这种类型的 Array_ptr_fn?
// Define some_x to have type Array_ptr_fn,
Array_ptr_fn some_x;
// But then how do I use some_x since function cannot return array.
首先要注意的是x
不是 function指针,而是实际的 function 声明。 它不是一个变量。 指向x
的指针的类型为int (*(*ptr_to_x)(int))[5]
。
第二点要注意的是x
的返回值既不是int[5]
也不是int[]
也不是int*
,而是int (*)[5]
。 也就是说,您需要编写(*retval)[0]
以获得实际的int
值。
考虑到这一点,编写使用这些类型的概念证明并不难:
#include <stdio.h>
int arr[5] = { 11, 22, 33, 44, 55 };
int (*ptr)[5] = &arr;
int (*x(int ignored))[5]
{
return ptr;
}
int main(void)
{
int (*(*ptr_to_x)(int))[5] = &x;
int (*i)[5] = ptr_to_x(123);
printf("%d\n", (*i)[2]);
return 0;
}
Array_ptr_fn some_x; /* ERROR */
您不能使用类型Array_ptr_fn
来定义变量...但是您可以使用指向该类型的指针来存储将来调用的 function 引用(具有该接口),如:
int (*f1(int))[5]; /* implemented elsewhere */
Array_ptr_fn *some_function = f1;
int (*my_array)[5] = f1(27);
/* or equivalently */
int (*my_second_array)[5] = some_function(27);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.