用函数实现模块化程序设计四

news/2024/11/13 18:38:06/文章来源:https://www.cnblogs.com/EricsT/p/18542555

数组作为函数参数

调用有参函数时,需要提供实参,实参可以是常量、变量或表达式

数组元素的作用与变量相当,一般来说,凡是变量可以出现的地方,都可以用数组元素代替,因此,数组元素也可以用作函数实参,其用法与变量相同,向形参船体数组元素的值。此外,数组名也可以作实参和形参,传递的是数组第一个元素的地址

数组元素作函数实参

数组元素可以用作函数实参,不能用作形参。因为形参是在函数被调用时临时分配存储单元的,不可能为一个数组元素单独分配存储单元(数组是一个整体,在内存中占连续的一段存储单元)

在用数组元素作函数实参时,把实参的值传给形参,是“值传递”方式。数据传递的方向是从实参传到形参,单向传递

例:输入10个数,要求输出其中值最大的元素和该数是第几个数


#include <stdio.h>
#include <string.h>int maxNum(int m, int n)//取最大值
{return m > n ? m : n;
}int main(void)
{int arr[10];//定义memset(arr, 0, sizeof(arr));//初始化for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)//输入scanf("%d", &arr[i]);int iMax = arr[0];int iIndex = 1;for (int i = 1; i < sizeof(arr) / sizeof(arr[0]); i++){if (iMax >= maxNum(iMax, arr[i]))continue;iMax = arr[i];iIndex = i + 1;}printf("\n%d\n%d\n", iMax, iIndex);//输出return 0;
}

在VS编译器内会报C4996错误,解决见下文:(下同)

C4996 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. - EricsT - 博客园 (cnblogs.com)

运行结果:

数组名作为函数参数

除了可以用数组元素作为函数参数外,还可以用数组名作为函数参数(包括实参和形参)

用数组元素作为实参时,向形参变量传递的是数组元素的值,而用数组名作函数实参时,向形参(数组名或指针变量)传递的是数组首元素的地址

例:有一个一维数组 score 内放 10 个学生成绩,求平均成绩


#include <stdio.h>
#include <string.h>float ave(float score[], size_t iSize)
{float fRet = 0;for (int i = 0; i < iSize; i++)//求和fRet += score[i];return fRet / iSize;//平均值
}int main(void)
{float score[10];//定义memset(score, 0, sizeof(score));//初始化for (int i = 0; i < sizeof(score) / sizeof(score[0]); i++)//赋值scanf("%f", &score[i]);printf("\n%f\n", ave(score, sizeof(score) / sizeof(score[0])));//平均值return 0;
}

运行结果:

用数组名作函数参数,应该是在主调函数和被调函数分别定义数组

实参数组与形参数组类型应该一致

C语言编译系统并不检查形参数组的大小,只是将实参数组的首元素的地址传给形参数组名。因此形参数组首元素和实参数组首元素是有同一地址,它们共占同一存储单元

形参数组可以不指定大小,在定义数组时在数组名后面跟一个空的方括号

用数组名作为函数实参时,不是把数组元素的值传递给形参,而是把实参数组的首元素地址传递给形参数组,这样子两个数组就共占同一段内存单元,所以形参数组元素的值改变,则实参数组元素对应的值也会改变

多维数组名作函数参数

多维数组元素可以作函数参数

可以用多维数组名作为函数的实参和形参,在被调用函数中对形参数组定义时可以指定每一维的大小,也可以省略第一维的大小

例:有一个3*4的矩阵,求所有元素中的最大值


#include <stdio.h>int maxNum(int num[][4], size_t iSize)
{int iMax = num[0][0];for (int i = 0; i < iSize; i++)for (int j = 0; j < 4; j++)iMax = iMax > num[i][j] ? iMax : num[i][j];return iMax;
}int main(void)
{int num[3][4] = { { 1, 3, 5, 7 },{ 2, 4, 6, 8 },{ 15, 17, 34, 12 }};printf("\n%d\n", maxNum(num, 3));return 0;
}

运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/833074.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vulnhub W1R3S: 1.0.1

Vulnhub W1R3S: 1.0.1 0x01:端口扫描 主机发现,靶机ip:192.168.231.133 nmap -sn 192.168.231.0/24-sn 仅主机扫描 /24 扫描c段详细全端口扫描 nmap -sT -sC -sV -O -p21,22,80,3306 192.168.231.133 -oA /root/scan/1/-sT: 以TCP进行扫描; -sC:使用 nmap 的默认脚本集合进…

永宏BI 自定义绘图(环状图)

结果样式:绑定数据:自定义JS代码:点击查看代码 option = {tooltip: {trigger: item,formatter: {a} <br/>{b}: {c} ({d}%)},series: [{type: pie,radius: [50%, 70%],avoidLabelOverlap: false,label: {show: false,position: center},emphasis: {label: {show: false…

Privilege Escalation(权限提升)

Privilege Escalation(权限提升) What the Shell? What is a shell shell 是我们与命令行环境 (CLI) 交互时使用的工具。换句话说, Linux中常见的 bash 或 sh 程序都是 shell 的例子,Windows 上的 cmd.exe 和 Powershell 也是如此。 简而言之,我们可以强制远程服务器向我们…

30 秒!用通义灵码画 SpaceX 星链发射流程图

30 秒!用通义灵码画 SpaceX 星链发射流程图不想读前人“骨灰级”代码, 不想当“牛马”程序员, 想像看图片一样快速读复杂代码和架构? 来了,灵码又加新 buff!!通义灵码支持代码逻辑可视化, 可以把你的每段代码画成流程图。 你可以把它当成一个超级脑图工具, 帮你快速画…

大模型--Megatron TP张量并行-15

目录1. 参考2. 介绍3. 权重的切分3.1 按行切分权重3.2 按列切分权重4. MLP层5. Self-Attention层6. Embedding层7. Cross-entropy层8. 张量模型并行 + 数据并行 1. 参考 https://zhuanlan.zhihu.com/p/622212228 2. 介绍 流水线并行 数据并行(DP,DDP和ZeRO) 介绍最重要,也是…

FreeModbus RTU 从机Hal库裸机移植避坑指南

首先说明 : FreeModbus 有很多个库!!!! 不同库的实现方法是略有不同的!!! 本次 FreeModbus RTU 移植 主要依据 这个网友分享的工程他人移植的库 你可能会在csdn看到他的文章, 但是完全跟着那个文章走很混乱 而且跟库的文件不一样. 故而 我重新整理了工程, 并写了一个详细的移植…

修改 NIKKE PC 端游戏缓存位置

本文记录如何使用 mklink 命令修改 NIKKE PC 端游戏缓存位置前言 NIKKE 每次版本更新都要下载大约 5~10G 的数据,以至于成为了我 AFK 的一部分原因 [允悲] 但是看游戏安装目录的大小却只有 1G 多,我还奇怪数据存哪去了,看到越来越小的 C 盘的空间才明白,草 搜索了一下后立马…

导包不对如何解决

问题: 这里这个包是自动导入的我们并不需要这个时候导致下面代码报错如何解决 2.解答:比如下面这给词爆红我们需要alt+enter,IDEA 会显示一个选择框,允许您选择 okhttp3.Request。选中后,它将使用您指定的正确包。,这里就是我是重新导入了maven依赖就好了

一图看懂云消息队列 RabbitMQ 版对比开源优势

随着企业对消息队列的性能和稳定性要求越来越高,运维成本也随之增加。 云消息队列 RabbitMQ 版通过架构优化:避免了消息积压导致的内存泄漏和服务器故障等稳定性问题; 解决了分布式系统中的脑裂难题; 并支持弹性伸缩和按量计费,有效降低资源和运维成本!那么,与开源 Rabb…

GIS工具哪家强?五款优质GIS工具箱对比分析

本文将为大家介绍五款功能各异的GIS工具箱,包括GISBox、QGIS、MapTiler、Saga GIS和Whitebox GAT。每款工具箱都有其独特的功能和应用场景,能够满足不同类型的GIS任务需求。无论是数据处理、空间分析、影像处理还是可视化需求,这些工具都能为用户提供丰富的解决方案。本文将…