易懂的数组作为函数参数(C语言)

目录

  • 易懂的数组作为函数参数(C语言)
    • 1、数组做函数参数
    • 2、通过形参数组修改数组元素
    • 3、数组排序

1、数组做函数参数

(1)、若将一个数组作为实际参数传递给函数,只需不带方括号的数组名即可

若数组a的定义为:int a[10];
若要将数组a作为实参传递给被调用函数SumArr(),
则调用语句可写成:SumArr(a,10);

数组名代表数组首元素的地址,因此数组名做参数就可以将数组的起始地址传递给形参。另外需要将数组元素的个数也传递给被调用的函数。

函数SumArr()的函数原型如下:
int SumArr( int b[],int n )
//表示函数SumArr()期望用形参b来接收一个整型的数组,用形参n来接收数组元素的个数

程序1.1:调用函数SumArr()计算累加和

#include<stdio.h>
int SumArr(int arry[],int n);int main()
{int a[5] = {1,4,5,7,9};//求数组a中前5个数的和printf("%d\n",SumArr(a,5));return 0;
}int SumArr(int arry[],int n)
{int sum = 0;for(int i = 0;i < n;i++)sum +=arry[i];return sum;
}

(2)、形参数组与实参数组为同一数组

  1. 因为数组名是代表该数组的首地址,用数组名作实参时,是把实参数组的首地址赋给形参。
  2. 实际上形参数组和实参数组为同一数组,共同拥有一段内存空间。

    (3)、参数声明
    (1)、在声明形参数组时,数组元素的个数不需要写在方括号中,如:
int SumArr(int array[],int n)
{...}//即便方括号中出现数字,编译器也将忽略该数字。在编译器看来,形参array不是一个真正的数组,只是一个可以存放地址的指针变量

(2)、向函数传递数组的时候,同时通过参数传递数组的元素的个数,有利于提高函数的通用性。

SumArr(a,5);//计算数组a的前5个元素之和
SumArr(a,3);//计算数组a的前3个元素之和

2、通过形参数组修改数组元素

一般变量作参数:传递的是数值,形参的值的改变不影响实参
数组做参数:传递的是数组的首地址,形参数组和实参数组实质上是同一块内存空间,形参数组发生改变,实参数组也随之发生改变。

程序2.1:通过调用函数ModifyArr(),将main()函数中数组a的每个元素变为原来的10倍。
a、通过函数修改数组元素

#include<stdio.h>
void ModifyArr(int arry[],int n);//每个元素变成10倍的函数原型int main()
{int i;int a[5] = {1,2,3,4,5};printf("原先的数组各元素分别是:\n");//未改变前输出for(i = 0;i < 5;i++)printf("%d\n",a[i]);ModifyArr(a,5);//调用函数改变元素值printf("变为原来的10的元素分别是:\n");//改变后输出for(i = 0;i < 5;i++)printf("%d\n",a[i]);return 0;
}void ModifyArr(int arry[],int n)
{for(int i = 0;i < n;i++)arry[i] *= 10;
}

b、把输出数组元素功能也包装成函数

#include<stdio.h>
void ModifyArr(int arry[],int n);//每个元素变成10倍的函数原型
void Print(int arry[],int n);//输出函数的原型int main()
{int i;int a[5] = {1,2,3,4,5};printf("原先的数组各元素分别是:\n");Print(a,5);//调用输出函数ModifyArr(a,5);//调用改变元素函数printf("变为原来的10的元素分别是:\n");Print(a,5);//调用输出元素return 0;
}void ModifyArr(int arry[],int n)
{for(int i = 0;i < n;i++)arry[i] *= 10;
}void Print(int arry[],int n)
{int i;for(i = 0;i < n;i++)printf("%d\n",arry[i]);
}

3、数组排序

给一个n个元素的数组进行升序,然后再依次输出:分别使用InputArr(),SortArr(),DispArr()实现数组的输入、排序、输出

#include<stdio.h>
#define N 20void InputArr(int arry[],int n);//输入元素的函数原型
void SortArr(int arry[],int n);//排序函数原型
void DispArr(int arry[],int n);//输出函数的原型int main(void)
{int n;int a[N];printf("Please enter the integers number:\n");scanf("%d",&n);InputArr(a,n);//输入n个元素存入数组中SortArr(a,n);//给n个元素进行升序DispArr(a,n);//输出n个元素return 0;
}void InputArr(int arry[],int n)
{int i;printf("Please enter the numbers:\n ");for(i = 0;i < n;i++)scanf("%d",&arry[i]);
}void SortArr(int arry[],int n)
{int i;int j;int temp;for(i = 0;i < n-1;i++){for(j = i+1;j < n;j++){if(arry[i] > arry[j]){temp = arry[i];arry[i] = arry[j];arry[j] = temp;}}}
}void DispArr(int arry[],int n)
{int i;printf("Please display the integers:\n");for(i = 0;i < n;i++)printf("%d\n",arry[i]);
}

易懂的数组作为函数参数(C语言)相关推荐

  1. c语言以数组作为函数参数,C语言将数组作为函数参数

    一个函数的形参是普通的局部变量.当发生函数调用时,程序创建这些形参,然后用对应的实参来初始化这些形参.形参的作用域就是函数块.函数内可以改变形参的值,而不会影响调用上下文中实参的值. 如果需要将一个数 ...

  2. 【C 语言】结构体 ( 结构体 数组 作为函数参数 | 数组 在 堆内存创建 )

    文章目录 一.结构体 数组 作为函数参数 ( 数组 在 堆内存创建 ) 二.完整代码示例 一.结构体 数组 作为函数参数 ( 数组 在 堆内存创建 ) 在上一篇博客 [C 语言]结构体 ( 结构体 数 ...

  3. C语言多维数组做函数参数技术推演

    多维数组做函数参数技术 C语言中只会以机械式的值拷贝的方式传递参数(实参把值传给形参) 二维数组参数同样存在退化的问题 等价关系 C语言中只会以机械式的值拷贝的方式传递参数(实参把值传给形参) int ...

  4. 【C语言进阶深度学习记录】三十一 数组作为函数参数时退化为指针

    之前的学习数组的文章中,已经知道一维数组作为函数参数的时候,最终会被编译器编译为指针.今天来看看二维数组的情形 文章目录 1 为什么C语言中的数组作为函数参数会退化为指针? 2 二维数组作为函数参数如 ...

  5. c语言学习-自定义函数并调用将一个字符串中的小写字母改为大写字母(数组元素和数组名作函数参数)

    c语言自定义函数并调用将一个字符串中的小写字母改为大写字母(数组元素和数组名作函数参数) 程序流程图: 代码: #include<stdio.h> char strupr(char ch[ ...

  6. C语言 二维数组作为函数参数的4种方式

    前言 多维数组中,二维数组是最常用的一种.在C语言编程中,二维数组的定义.取值以及赋值都比较容易,与一维数组类似.然而,在将二维数组作为函数参数传递时,参数结构较复杂,难以理解.本文章是实用型文章,注 ...

  7. C语言 | 二维数组作为函数参数

    1024G 嵌入式资源大放送!包括但不限于C/C++.单片机.Linux等.关注微信公众号[嵌入式大杂烩],回复1024,即可免费获取! 偶然间发现C语言二维数组作为函数的参数是个比较容易出错的问题. ...

  8. 【C语言|函数|数组】多维数组作为函数参数

    文章目录 1. 方法一:传递数组 2. 方法二:数组指针 3. 方法三:多重指针 4. 数组作为参数时可以用sizeof(a)或ARRAY_SIZE(a)来获取大小吗? 1. 方法一:传递数组 C语言 ...

  9. C-指针,二级指针,二维数组作为函数参数使用,C语言链表(详解)

    一级指针 int *p;            //表示定义一个int型(4字节)的指针p &p                 //表示p自身的地址位置 p                  ...

最新文章

  1. 三目运算符 改变a标签的class属性
  2. VMware中无法识别usb
  3. AnalyticDB MySQL拥抱云原生,强力支撑双十一
  4. 创建型模式:抽象工厂
  5. 大数据(big data)_如何使用Big Query&Data Studio处理和可视化Google Cloud上的财务数据...
  6. Content Security Policy 入门教程
  7. 最大尺寸分辨率_LG UltraFine 4K显示器重上架苹果商店:尺寸变大,但降为UHD
  8. htop的VIRT是什么
  9. 网外(Internet)访问代理服务器内部的实现方法
  10. 儿童机器人编程语言_儿童编程机器人
  11. 计算机化学试题,08计算机化学试卷yuanj.doc
  12. 总结 部署 Kubernetes+Heapster+InfluxDB+Grafana 详解
  13. Uniapp子组件不显示
  14. 解决laytpl.js模板引擎插件加载模板后无法获取模板中的元素id等内容
  15. ]一周热文推荐:致应届毕业生——程序员的生存法则
  16. 金丝雀发布、滚动更新、蓝绿发布到底有啥区别
  17. 将社交玩法玩到极致的连咖啡,如何让咖啡成为日常消费?
  18. python绘制地图的第三方库_10个用于GIS和地图绘制的Python库
  19. 亲测有效解决torch.cuda.is_available()返回False的问题(分析+多种方案),点进不亏
  20. 探索PinYin4j.jar将汉字转换为拼音的基本用法

热门文章

  1. Python库本地安装
  2. 东华大学数据库作业一
  3. Python安装教程(3.10.0版本)
  4. JS 观察者模式实现简单EventBus
  5. 编写测试用例的几个要素
  6. mysql 删除字段的注释_MySQL表和列的注释总结
  7. Vue压缩图片插件——localResizeIMG(简称lrz)
  8. 针对POJO类get、set方法的单元测试覆盖
  9. GPU编程自学10 —— 流并行
  10. 67页新型智慧城市整体规划建设方案(附下载)