忘记最初在网上想找什么资料了,偶然间看到这篇的,如果让我自己写的话,肯定不会写的,好好学习了下。
严格的讲,无法直接从函数返回一个数组。但是,可以让函数返回一个指向任何数据结构的指针,当然也可以是一个指向数组的指针。
下面直接贴代码:
- #include <stdio.h>
- #include <string.h>
- #include <malloc.h>
- #define PRINT_ADDRESS(addr) printf("0x%08X/n", (addr))
- // 使用指针从函数返回一个数组
- // paf是一个函数,它返回一个指针,该指针指向一个包含20个int元素的数组
- int (*paf())[20]
- {
- int (*pear)[20];
- int i = 0;
- pear = (int (*)[20])malloc(20 * sizeof(int));
- printf("Malloc memory, Address: ");
- PRINT_ADDRESS(pear); // 打印所分配内存的地址
- if (!pear)
- {
- printf("malloc failed!/n");
- }
- // 初始化数据
- for (i = 0; i < 20; i++)
- {
- (*pear)[i] = i;
- }
- return pear;
- }
- void UsePointerReturnArrayFunction()
- {
- // 声明result是一个指针,指向一个包含20个int元素的数组
- int (*result)[20];
- char *p = NULL;//"char * test";
- // 上面是变量定义
- printf("/n使用指针从函数返回一个数组 -->/n");
- // 通过调用函数返回一个指针(指针指向一个数组)
- result = paf();
- printf(" Free memory, Address: ");PRINT_ADDRESS(result);
- free(result); // 打印所释放内存的地址
- printf("%s/n", p);
- printf("--> 使用指针从函数返回一个数组/n/n");
- }
- int main()
- {
- UsePointerReturnArrayFunction();
- return EXIT_SUCCESS;
- }