数组指针(不是数组指针)是 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)
该函数应该这样定义:
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)