易懂的数组作为函数参数(C语言)
易懂的数组作为函数参数(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)、形参数组与实参数组为同一数组
- 因为数组名是代表该数组的首地址,用数组名作实参时,是把实参数组的首地址赋给形参。
- 实际上形参数组和实参数组为同一数组,共同拥有一段内存空间。
(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语言)相关推荐
- c语言以数组作为函数参数,C语言将数组作为函数参数
一个函数的形参是普通的局部变量.当发生函数调用时,程序创建这些形参,然后用对应的实参来初始化这些形参.形参的作用域就是函数块.函数内可以改变形参的值,而不会影响调用上下文中实参的值. 如果需要将一个数 ...
- 【C 语言】结构体 ( 结构体 数组 作为函数参数 | 数组 在 堆内存创建 )
文章目录 一.结构体 数组 作为函数参数 ( 数组 在 堆内存创建 ) 二.完整代码示例 一.结构体 数组 作为函数参数 ( 数组 在 堆内存创建 ) 在上一篇博客 [C 语言]结构体 ( 结构体 数 ...
- C语言多维数组做函数参数技术推演
多维数组做函数参数技术 C语言中只会以机械式的值拷贝的方式传递参数(实参把值传给形参) 二维数组参数同样存在退化的问题 等价关系 C语言中只会以机械式的值拷贝的方式传递参数(实参把值传给形参) int ...
- 【C语言进阶深度学习记录】三十一 数组作为函数参数时退化为指针
之前的学习数组的文章中,已经知道一维数组作为函数参数的时候,最终会被编译器编译为指针.今天来看看二维数组的情形 文章目录 1 为什么C语言中的数组作为函数参数会退化为指针? 2 二维数组作为函数参数如 ...
- c语言学习-自定义函数并调用将一个字符串中的小写字母改为大写字母(数组元素和数组名作函数参数)
c语言自定义函数并调用将一个字符串中的小写字母改为大写字母(数组元素和数组名作函数参数) 程序流程图: 代码: #include<stdio.h> char strupr(char ch[ ...
- C语言 二维数组作为函数参数的4种方式
前言 多维数组中,二维数组是最常用的一种.在C语言编程中,二维数组的定义.取值以及赋值都比较容易,与一维数组类似.然而,在将二维数组作为函数参数传递时,参数结构较复杂,难以理解.本文章是实用型文章,注 ...
- C语言 | 二维数组作为函数参数
1024G 嵌入式资源大放送!包括但不限于C/C++.单片机.Linux等.关注微信公众号[嵌入式大杂烩],回复1024,即可免费获取! 偶然间发现C语言二维数组作为函数的参数是个比较容易出错的问题. ...
- 【C语言|函数|数组】多维数组作为函数参数
文章目录 1. 方法一:传递数组 2. 方法二:数组指针 3. 方法三:多重指针 4. 数组作为参数时可以用sizeof(a)或ARRAY_SIZE(a)来获取大小吗? 1. 方法一:传递数组 C语言 ...
- C-指针,二级指针,二维数组作为函数参数使用,C语言链表(详解)
一级指针 int *p; //表示定义一个int型(4字节)的指针p &p //表示p自身的地址位置 p ...
最新文章
- 三目运算符 改变a标签的class属性
- VMware中无法识别usb
- AnalyticDB MySQL拥抱云原生,强力支撑双十一
- 创建型模式:抽象工厂
- 大数据(big data)_如何使用Big Query&Data Studio处理和可视化Google Cloud上的财务数据...
- Content Security Policy 入门教程
- 最大尺寸分辨率_LG UltraFine 4K显示器重上架苹果商店:尺寸变大,但降为UHD
- htop的VIRT是什么
- 网外(Internet)访问代理服务器内部的实现方法
- 儿童机器人编程语言_儿童编程机器人
- 计算机化学试题,08计算机化学试卷yuanj.doc
- 总结 部署 Kubernetes+Heapster+InfluxDB+Grafana 详解
- Uniapp子组件不显示
- 解决laytpl.js模板引擎插件加载模板后无法获取模板中的元素id等内容
- ]一周热文推荐:致应届毕业生——程序员的生存法则
- 金丝雀发布、滚动更新、蓝绿发布到底有啥区别
- 将社交玩法玩到极致的连咖啡,如何让咖啡成为日常消费?
- python绘制地图的第三方库_10个用于GIS和地图绘制的Python库
- 亲测有效解决torch.cuda.is_available()返回False的问题(分析+多种方案),点进不亏
- 探索PinYin4j.jar将汉字转换为拼音的基本用法