C语言中数组作为函数的参数以及返回值的使用简单入门

橘子海
橘子海
发布时间:2026-10-13| 2人浏览过
原创

在C语言开发中,数组处理是高频场景。由于数组名本质是指针,传递数组需明确语法规范;而函数无法直接返回整个数组对象,必须借助指针与静态存储区特性实现数据回传。本文通过求均值与生成随机数两个实例,详解这两种核心操作的实现原理与代码写法。

将数组作为函数参数传递

C语言在调用函数传递数组时,实际上传递的是数组首元素的地址(指针)。编译器允许以下三种等效的形参声明方式来接收整型数组:

  1. 指针形式:void myFunction(int *param),显式声明为指向整数的指针。
  2. 定长数组形式:void myFunction(int param[10]),虽然指定了大小,但本质上仍被视作指针,该大小主要用于代码可读性而非运行时检查。
  3. 变长数组形式: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语言指针与数组操作的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。