如何为返回二维数组的函数定义函数指针?
解决返回二维数组的函数指针typedef问题
要为返回二维数组的函数定义正确的函数指针typedef,关键是精准匹配函数的返回类型——你的my_num函数返回的是指向大小为2的int数组的指针,对应的函数指针typedef需要准确描述这个类型。
正确的typedef声明
typedef int (*(*get_max_ports_t)(void))[2];
推导逻辑:
- 原函数类型为
int (*my_num(void))[2],表示my_num是无参数函数,返回值是int (*)[2](指向含2个int的数组的指针)。 - 函数指针的typedef格式为
typedef 返回类型 (*指针类型名)(参数),将返回类型int (*)[2]代入后,就得到上述声明。
完整修正后的代码
#include <stdio.h> typedef int (*(*get_max_ports_t)(void))[2]; int arr[2][2] = {{3,4},{5,6}}; int (*my_num(void))[2] { return arr; } int main() { // 创建函数指针实例并绑定到my_num get_max_ports_t get_max_ports = &my_num; // 通过函数指针调用函数 int (*x)[2] = get_max_ports(); printf("%d\t%d\n", x[0][0], x[0][1]); printf("%d\t%d\n", x[1][0], x[1][1]); return 0; }
你之前尝试的写法错误原因
typedef int ((*get_max_ports_t)(void)[2]):括号位置错误,将函数参数和返回类型的数组维度错误绑定,不符合C语言类型声明语法。typedef int* ((**get_max_ports_t)(void)):误用双指针,你的函数返回的是数组指针(int (*)[2]),而非指向指针的指针(int**),二者语义、内存布局完全不同,不能混用。
内容的提问来源于stack exchange,提问作者Aneesh C Rao
相关产品推荐
相关产品推荐

