C 语言 从函数返回数组
C 语言不允许返回一个完整的数组作为函数的参数。但是,可以通过指定不带索引的数组名来返回一个指向数组的指针。 其实就是通过返回一个指向数组第一个元素的指针来返回数组。
我们将在下一章中讲解有关指针的知识,您可以先跳过本章,等了解了 C 指针的概念之后,再来学习本章的内容。
如果想要从函数返回一个一维数组,就必须声明一个返回指针的函数,如下:
int * myFunction() { .... }
注意
C 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量
现在,让我们来看下面的范例,它会生成 10 个随机数,并使用数组来返回它们
/** * file: main.c * author: 简单教程(www.twle.cn) */ #include <stdio.h> #include <stdlib.h> #include <time.h> /* * 要生成和返回随机数的函数 */ int * getRandom( ) { static int r[5]; int i; srand( (unsigned)time( NULL ) ); for ( i = 0; i < 5; ++i) { r[i] = rand(); printf( "r[%d] = %d\n", i, r[i]); } return r; } int main () { int *p; int i; p = getRandom( ); printf("\n"); for ( i = 0; i < 5; i++ ) { printf( "*(p + %d) : %d\n", i, *(p + i)); } return 0; }
编译和运行上面的范例,输出结果如下
$ gcc main.c && a.out r[0] = 1586542705 r[1] = 1866281783 r[2] = 451778799 r[3] = 1691582648 r[4] = 2041045950 *(p + 0) : 1586542705 *(p + 1) : 1866281783 *(p + 2) : 451778799 *(p + 3) : 1691582648 *(p + 4) : 2041045950
从范例中我们可以看到,函数返回数组,需要经过以下几个步骤:
-
被调用函数内部必须定义一个 static 的静态数组
-
调用函数的语句块必须声明一个接收相同数据类型的指针
-
数组的长度要硬编码在程序内。
就是第 3 条,导致代码的复用性太低了,所以,我们不推荐函数返回数组。