文章目录

  • 函数返回一维数组
  • 函数返回二维数组

C语言中函数返回数组是很重要的一种应用,有时候在程序中调用函数返回数组可以更容易的实现我们想要的某些操作,比如一次返回多个值,这篇文章带来的是C语言中函数返回一维数组和二维数组的例子。


函数返回一维数组

函数返回一维数组中需要注意的是:定义函数时需要在函数类型的后面加上一个 * 号;函数体中定义的一维数组需要在其类型的前面加上关键字 static;函数体中定义的数组的长度需要确定。
一个简单的函数返回一维数组的C代码如下。

#include int* return_array ()// 在定义返回一维数组的函数时,在定义的函数类型后要加*号{int i;static int a[10];//这里一定要加上static,这样数组a就是一个静态数组了,数组长度需要再这里确定for(i=0; i<10; i++)a[i] = i;return a;}void main (){ int i;int *array;array = return_array(); //调用函数for(i=0; i<10; i++)printf("array[%d] = %d\n",i,array[i]);}

上面代码中最关键的还是在函数体中定义数组的部分,为什么要将数组的类型定义为静态数组,也就是在其类型前面加上static关键字。这是因为静态数组的生命周期从运行到结束贯穿整个程序,而如果你不加static关键字的话,那么你定义在函数体中的数组就是一个局部变量,其存放在栈中,在函数被调用之后,栈中存放的局部变量就被回收了,因此也就无法在主函数中通过调用函数得到数组中存放的值了。
上面代码的运行结果如下图所示。

可以看到,在主函数中调用函数打印函数体中定义的数组值是正确的!
如果在定义数组时没有添加关键字static,输出结果如下图所示。

输出的值是随机的,编译时也出现了如下警告,即函数返回的是局部变量的地址,因此数组中的各个值也没有正确的输出。


函数返回二维数组

函数返回二维数组中需要注意的是:定义函数时需要在函数类型的后面加上两个 * 号;函数体中定义的二维数组需要依次分配行长度和列长度;函数体中定义的二维数组的长度需要确定。
一个简单的函数返回二维数组的C代码如下。

#include #include int** return_array (){int i,j;int** a; a = (int**)malloc(5*sizeof(int*));//分配行长度for(i=0; i<5; i++)a[i] = (int*)malloc(5*sizeof(int));//分配列长度for(i=0; i<5; i++) //给数组赋初值for(j=0; j<5; j++)a[i][j] = i*10+j;return a;}void main (){ int i,j;int **array;array = return_array(); //调用函数for(i=0; i<5; i++){for(j=0; j<5; j++)printf("array[%d][%d] = %2d",i,j,array[i][j]);printf("\n");} }

上面代码的运行结果如下图所示。

有人可能疑惑为什么在函数中定义二维数组时不直接在中括号里给定行长和列长,就像下面这样。

但是这样定义后,输出时警告我们定义的数组和返回类型不兼容。

这时候可以通过函数返回二维数组首行的地址,然后逐个访问其元素,代码如下。

#include #include int* return_array(){int i,j;static int a[5][5]; for(i=0; i<5; i++)for(j=0; j<5; j++)a[i][j] = i*10+j;return *a;//return a[0];//这里返回首行地址 *a和a[0]都是可以的}void main (){ int *array;int i,j=0,k=0;array = return_array();for(i=0;i<25;i++){printf("array[%d][%d] = %2d",j,k,array[i]);k++;if(k==5){k=0;j++;printf("\n");}}}

运行的结果如下图所示。


以上就是C语言中函数返回一维数组和二维数组的所有内容了!
本文参考文章:
C语言函数如何正确返回数组?
二维数组的传递/二维数组作为函数的返回值