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

How to define a function pointer for a function returning a 2-dimensional array?

提问人:Aneesh C Rao 提问时间:7/15/2023 最后编辑:Aneesh C Rao 更新时间:7/15/2023 访问量:61

问:

我编写了这个程序,它定义了一个函数来返回一个一维数组和一个函数指针的 typedef 声明。函数指针的实例用于调用函数。my_num

typedef int* (*get_max_ports_t)(void);
int arr[4] = {3,4,5,6};

int (*my_num(void)) {
    return arr;
}

int main()
{
    get_max_ports_t get_max_ports;
    get_max_ports = &my_num;

    int *x = get_max_ports();
    printf("%d %d %d %d\n", x[0], x[1], x[2], x[3]);

    return 0;
}

我现在想编写一个类似的程序来返回一个二维数组和一个函数指针的 typedef 声明,以通过实例调用该函数。我已经能够编写函数,但我无法理解如何定义 typedef 声明和实例赋值,因为我对指针的理解在这里有点粗略。

// typdef pointer declaration here
int arr[2][2] = {{3,4},{5,6}};

int (*my_num(void))[2] {
    return arr;
}


int main()
{
    // create typedef instance and attach to my_num()

    int (*x)[2] = my_num(); // call function through typedef instance
    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 声明 () 的一部分,并将声明为双指针 (),但两者都会导致编译错误。typedef int ((*get_max_ports_t)(void)[2])typedef int* ((**get_max_ports_t)(void))

c 多维数组 指针 虚拟函数

评论


答:

1赞 n. m. could be an AI 7/15/2023 #1

使用 typedef 作为函数返回类型。

typedef int (*my_arr_ptr_type)[2];
my_arr_ptr_type my_arr = arr;

my_arr_ptr_type my_func(void)
{
    return my_arr;
}

typedef my_arr_ptr_type (*my_func_ptr_type)(void);

演示

1赞 Ted Lyngmo 7/15/2023 #2

你有自己的声明。int (*x)[2] = ...

只需将数组指针 ,这里称为 ,放入:typedefap

typedef int(*ap)[2];

完整示例:

#include <stdio.h>

// typedef pointer declaration here
typedef int(*ap)[2];

int arr[2][2] = {{3,4},{5,6}};

ap my_num(void) {
    return arr;
}

int main()
{
    // create typedef instance and attach to my_num()
    ap x = my_num();  // call function through typedef instance

    printf("%d\t%d\n", x[0][0], x[0][1]);
    printf("%d\t%d\n", x[1][0], x[1][1]);
    return 0;
}