繁体   English   中英

你如何使用它:int (*x(int))[5]

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM