C语言中数组作为函数的参数以及返回值的使用简单入门
在C语言开发中,数组处理是高频场景。由于数组名本质是指针,传递数组需明确语法规范;而函数无法直接返回整个数组对象,必须借助指针与静态存储区特性实现数据回传。本文通过求均值与生成随机数两个实例,详解这两种核心操作的实现原理与代码写法。
将数组作为函数参数传递
C语言在调用函数传递数组时,实际上传递的是数组首元素的地址(指针)。编译器允许以下三种等效的形参声明方式来接收整型数组:
- 指针形式:
void myFunction(int *param),显式声明为指向整数的指针。 - 定长数组形式:
void myFunction(int param[10]),虽然指定了大小,但本质上仍被视作指针,该大小主要用于代码可读性而非运行时检查。 - 变长数组形式:
void myFunction(int param[]),不指定具体长度,同样作为指针处理。
无论采用哪种声明,函数内部均不进行边界检查,因此操作时需确保访问范围合法。以下示例展示了如何定义一个计算数组平均值的函数,并在主函数中调用它:
#include <stdio.h>
/* 函数声明 */
double getAverage(int arr[], int size);
int main ()
{
/* 定义包含5个元素的数组 */
int balance[5] = {1000, 2, 3, 17, 50};
double avg;
/* 将数组名及大小传递给函数 */
avg = getAverage( balance, 5 );
/* 输出结果 */
printf( "Average value is: %f \n", avg );
return 0;
}
/* 函数定义:计算并返回平均值 */
double getAverage(int arr[], int size)
{
int i;
double sum = 0; /* 注意初始化为0 */
double avg;
for (i = 0; i < size; ++i)
{
sum += arr[i];
}
avg = sum / size;
return avg;
}
编译执行上述代码将输出 Average value is: 214.400000。此例中通过额外传递 size 参数解决了函数内部无法自动获取数组长度的问题。
从函数返回数组
C语言标准不允许将整个数组作为单一对象返回给调用者。若需从函数“返回”数组内容,标准做法是返回指向该数组首地址的指针。由于局部变量在函数结束后其栈内存会被回收,直接返回局部数组的地址会导致悬空指针,因此必须将待返回的数组声明为 static 静态变量,使其生命周期延伸至程序运行结束。
第1步:定义返回指针的函数
首先创建函数原型,返回类型为 int *。在函数体内,务必使用 static 修饰生成的数组,以确保数据安全性:
#include <stdio.h>
#include <time.h>
/* 随机数生成函数,返回静态数组指针 */
int * getRandom( )
{
static int r[10]; /* 静态存储,避免越界 */
int i;
/* 设置随机种子 */
srand( (unsigned)time( NULL ) );
for ( i = 0; i < 10; ++i)
{
r[i] = rand();
printf( "r[%d] = %d\n", i, r[i]);
}
return r; /* 返回数组首地址 */
}
第2步:在主函数中接收并遍历指针
调用上述函数后,将返回的指针赋值给整形指针变量,随后通过指针算术运算或下标法访问数据:
int main ()
{
/* 定义指针接收返回值 */
int *p;
int i;
p = getRandom();
/* 通过指针偏移遍历数组 */
for ( i = 0; i < 10; i++ )
{
printf( "*(p + %d) : %d\n", i, *(p + i));
}
return 0;
}
执行该程序将先输出静态数组内的随机数值,再通过指针打印确认数据一致。这展示了C语言中数组参数传递与间接返回的标准模式。
以上就是C语言中数组作为函数参数及返回值的详细内容,更多关于C语言指针与数组操作的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









