You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为返回二维数组的函数定义函数指针?

解决返回二维数组的函数指针typedef问题

要为返回二维数组的函数定义正确的函数指针typedef,关键是精准匹配函数的返回类型——你的my_num函数返回的是指向大小为2的int数组的指针,对应的函数指针typedef需要准确描述这个类型。

正确的typedef声明

typedef int (*(*get_max_ports_t)(void))[2];

推导逻辑:

  1. 原函数类型为int (*my_num(void))[2],表示my_num是无参数函数,返回值是int (*)[2](指向含2个int的数组的指针)。
  2. 函数指针的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;
}

你之前尝试的写法错误原因

  1. typedef int ((*get_max_ports_t)(void)[2]):括号位置错误,将函数参数和返回类型的数组维度错误绑定,不符合C语言类型声明语法。
  2. typedef int* ((**get_max_ports_t)(void)):误用双指针,你的函数返回的是数组指针(int (*)[2]),而非指向指针的指针(int**),二者语义、内存布局完全不同,不能混用。

内容的提问来源于stack exchange,提问作者Aneesh C Rao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 21:36:06