C语言中数组作为函数的参数以及返回值的使用简单入门
函数通过数组作为参数
如果想通过一个一维数组作为函数的参数,就必须声明函数形式参数,使用以下三种方式与所有三个声明方法之一产生类似的结果,因为每一种方式告诉编译器,一个整数指针将会要被接收。类似的方式,可以使用多维数组形式参数。
方式-1
形式参数为指针如下。在下一章将学习什么是指针。
voidmyFunction(int*param)
{
.
.
.
}
方式-2
如下形式数组参数的大小:
voidmyFunction(intparam[10])
{
.
.
.
}
方式-3
如下形式数组参数作为可变大小:
voidmyFunction(intparam[])
{
.
.
.
}
例子
现在,考虑下面的函数,这将需要一个数组作为另一个参数,并根据传递的参数,它会返过数组数值的平均值,如下:
doublegetAverage(intarr[],intsize) { inti; doubleavg; doublesum; for(i=0;i<size;++i) { sum+=arr[i]; } avg=sum/size; returnavg; }
现在,让我们调用上面的函数如下:
#include<stdio.h> /*functiondeclaration*/ doublegetAverage(intarr[],intsize); intmain() { /*anintarraywith5elements*/ intbalance[5]={1000,2,3,17,50}; doubleavg; /*passyiibaiertothearrayasanargument*/ avg=getAverage(balance,5); /*outputthereturnedvalue*/ printf("Averagevalueis:%f",avg); return0; }
当上述代码被编译在一起并执行时,它产生了以下结果:
Averagevalueis:214.400000
正如所看到的,数组的长度并不重要,只要C语言函数不进行形式参数的边界检查。
函数返回数组
C语言编程不允许返回整个数组作为参数传递给函数。但是,可以通过指定数组名不带索引返回一个指针数组。如果想从一个函数返回一个一维数组,就必须声明返回一个指针,如在下面的例子中的函数:
int*myFunction()
{
.
.
.
}
第二点要记住的是,C语言不提倡局部变量的地址返回在函数之外,所以必须定义局部变量为静态变量。
现在,考虑下面的函数,将产生10个随机数字和使用数组返回它们,并调用这个函数如下:
#include<stdio.h> /*functiontogenerateandreturnrandomnumbers*/ int*getRandom() { staticintr[10]; inti; /*settheseed*/ srand((unsigned)time(NULL)); for(i=0;i<10;++i) { r[i]=rand(); printf("r[%d]=%d ",i,r[i]); } returnr; } /*mainfunctiontocallabovedefinedfunction*/ intmain() { /*ayiibaiertoanint*/ int*p; inti; p=getRandom(); for(i=0;i<10;i++) { printf("*(p+%d):%d ",i,*(p+i)); } return0; }
当上述代码被编译在一起并执行时,它会产生导致一些如下:
r[0]=313959809 r[1]=1759055877 r[2]=1113101911 r[3]=2133832223 r[4]=2073354073 r[5]=167288147 r[6]=1827471542 r[7]=834791014 r[8]=1901409888 r[9]=1990469526 *(p+0):313959809 *(p+1):1759055877 *(p+2):1113101911 *(p+3):2133832223 *(p+4):2073354073 *(p+5):167288147 *(p+6):1827471542 *(p+7):834791014 *(p+8):1901409888 *(p+9):1990469526