指向数组的指针(不是数组指针)是C编程语言的一个鲜为人知的特性.

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

printf("[2]=%d", (*arr_ptr)[2]);

They allow you to "un-decay" a dynamically allocated array pointer.
(which is pretty cool in my opinion)

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

printf("[2]=%d", (*arr_ptr)[2]);

I'm trying to define a function to return an array pointer, without success.
I tried something like this:

int (*)[5] create_arr_5(void) 
{
    int(*arr_ptr)[5] = malloc(sizeof(int) * 5);
    return arr_ptr;
}

推荐答案

该函数应定义如下:

int (*create_arr_5(void))[5]
{
    int(*arr_ptr)[5] = malloc(sizeof(int) * 5);
    return arr_ptr;
}

通读声明,create_arr_5是一个函数:

create_arr_5()

这不需要任何参数:

create_arr_5(void)

并返回一个指针:

*create_arr_5(void)

大小为5的数组:

(*create_arr_5(void))[5]

满分int分:

int (*create_arr_5(void))[5]

C++相关问答推荐

你能用自己的地址声明一个C指针吗?

MISRA C:2012 11.3违规强制转换(FLOAT*)到(uint32_t*)

编译的时候g++通常会比GCC慢很多吗?

C:二进制搜索和二进制插入

带有sigLongjMP中断I/O的异常处理程序

当我更改编译优化时,相同的C代码以不同的方式运行

如何在C语言中正确打印图形

C:在编译时构建和使用字符串文字的预处理器宏?

为什么realloc函数在此代码中修改变量?

如何在c中使用具有不同变量类型的内存分配?

条件跳转或移动取决于未初始化值(S)/未初始化值由堆分配创建(Realloc)

如何在不读取整个字符串的情况下删除UTF8字符串的尾随空格以提高性能?

如何逐位读取二进制文件?

如何打印循环调度问题的时间表

将size_t分配给off_t会产生符号转换错误

GCC认为这是一个VLA是对的吗?

从管道读取数据时丢失

为什么需要struct in_addr

nullptr_t 是否会 destruct 类型双关或指针转换?

如何确定 C 程序中的可用堆内存