如何从 C 函数中返回数组指针?

gbe*_*rth 5 c arrays

数组指针(不是数组指针)是 C 编程语言的一个鲜为人知的功能。

int arr[] = { 3, 5, 6, 7, 9 };
int (*arr_ptr)[5] = &arr;

printf("[2]=%d", (*arr_ptr)[2]);
Run Code Online (Sandbox Code Playgroud)

它们允许您“恢复”动态分配的数组指针。
(我认为这很酷)

int *ptr = malloc(sizeof(int) * 5);
int(*arr_ptr)[5] = (int(*)[5])ptr;

printf("[2]=%d", (*arr_ptr)[2]);
Run Code Online (Sandbox Code Playgroud)

我试图定义一个函数来返回数组指针,但没有成功。
我尝试过这样的事情:

int (*)[5] create_arr_5(void) 
{
    int(*arr_ptr)[5] = malloc(sizeof(int) * 5);
    return arr_ptr;
}
Run Code Online (Sandbox Code Playgroud)

dbu*_*ush 2

该函数应该这样定义:

int (*create_arr_5(void))[5]
{
    int(*arr_ptr)[5] = malloc(sizeof(int) * 5);
    return arr_ptr;
}
Run Code Online (Sandbox Code Playgroud)

通过声明来讨论,create_arr_5是一个函数:

create_arr_5()
Run Code Online (Sandbox Code Playgroud)

不带参数:

create_arr_5(void)
Run Code Online (Sandbox Code Playgroud)

并返回一个指针:

*create_arr_5(void)
Run Code Online (Sandbox Code Playgroud)

对于大小为 5 的数组:

(*create_arr_5(void))[5]
Run Code Online (Sandbox Code Playgroud)

int

int (*create_arr_5(void))[5]
Run Code Online (Sandbox Code Playgroud)

  • 我宁愿建议 `malloc(sizeof(*arr_ptr))` (3认同)