C语言什么是形参和实参?如何使⽤?

一、问题

        在调⽤函数的时候,调⽤函数和被调⽤函数之间基本都会发⽣数据传递关系,这就要⽤到有参函数,⽽不传递数据的就需要⽆参函数。这样必然涉及形参和实参的概念,那么究竟什么是形参?什么又是实参呢?如何应⽤?

二、解答

        定义函数 int test(int x,int y) 时,函数名后⾯括号中的变量名就是“形式参数”(简称形参)。实际参数就是在主调函数中调⽤⼀个函数时,函数名后⾯括号中的参数。

        形参出现在函数定义中,在整个函数体内都可以使⽤,离开该函数则不能使⽤。实参出现在主调函数中,进⼊被调函数后,实参变量也不能使⽤。

        形参和实参的功能是进⾏数据传送。发⽣函数调⽤时,主调函数把实参的值传送给被调函数的形参,从⽽实现主调函数向被调函数的数据传送。

函数的形参和实参具有以下特点:

        (1)形参变量只有在被调⽤时才分配内存单元,在调⽤结束时将释放所分配的内存单元。因此,形参只在函数内部有效。函数调⽤结束返回主调函数后,就不能再使⽤该形参变量了。

        (2)实参可以是常量、变量、表达式、函数等。⽆论实参是何种类型的量,在进⾏函数调⽤之前,每个实参都必须具有确定的值,以便把这些值传递给形参(如果形参是数组名,则传递的是数组⾸地址⽽不是数组的值,这点会在后⾯提到)。因此,应预先⽤赋值、输⼊等⽅法使实参获得确定值。

        (3)实参和形参的类型应相同或赋值兼容。例如下⾯的形式。

#include <stdio.h>
int test(int x, int y)
{
    int z;
    z = x * y;
    return z;
}
int main()
{
    float a, b, c;
    printf("please input a and b:\n");
    scanf("%f,%f", &a, &b);
    c = test(a, b);
    printf("the product is:%f\n", c);
}

输出结果如下:

please input a and b:
2.5,3.8
the product is:6.000000

        通过输出结果会发现 2.5 与 3.8 的积是 6 ,显然这个结果不正确。这是为什么呢?因为形参的数据类型是基本整型,⽽实参的数据类型是单精度型,实参和形参的数据类型不同, 所以最终结果产⽣了误差。

        (4)C语⾔规定,实参变量对形参变量的数值传递是单向传递,即只能由实参传给形参,⽽不能由形参再传给实参。下⾯的程序可以说明这个问题。

        计算函数 f(x) ​​​​的值代码如下。 

#include <stdio.h>

int f(int n)
{
    int i;
    if (n > 0)
        n = n + 10;
    else
    {
        if (n < 0)
        {
            n = n + 20;
        }
        else
        {
            n = 100;
        }
    }
    printf("n=%d\n", n);
    return n;
}
int main()
{
    int n;
    printf("input number\n");
    scanf("%d", &n);
    f(n);
    return 0;
}

程序运⾏结果如如下:

input number
25
n=35

        本程序中定义了⼀个函数 f( ) ,该函数的功能是根据输⼊数的正负值不同与不同的数相加求和。在主函数中输⼊ n 值,并作为实参,在调⽤时传送给 f( ) 函数的形参n。

        在函数 f( ) 中先⽤ printf 语句输出了⼀次n值,这个n值是形参最后取得的 n 值。在主函数中再⽤ printf 语句输出⼀次 n 值,这个 n 值是实参 n 的值。从运⾏情况看,输⼊的 n 值为15,即实参 n 的值为15。把此值传给函数 f( ) 时,形参 n 的初值也为15。

        在执⾏函数过程中,形参 n 的值变为25。返回主函数之后,输出实参 n 的值仍为15。由此可见,实参的值不随形参的变化⽽变化。有⼀点要说明的是,这⾥的主函数和函数 f( ) 中⽤到的 n 应加以区别,这两个 n 不是同⼀个 n ,它们各⾃作⽤的范围不同。

三、总结

        对于到底是使⽤有参函数还是使⽤⽆参函数,需要根据函数所要实现的功能来决定。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

编译与链接

环境&#xff1a; 在ASCI C的任何一种实现中&#xff0c;存在两种不同的环境&#xff1a; 1.翻译环境&#xff0c;在这个环境中&#xff0c;源代码被转换为可执行的机器指令&#xff08;二进制指令&#xff09; 2.运行环境&#xff0c;用于实际执行代码。 流程:c文件->翻译…

(4)(4.3) Kogger Sonar

文章目录 前言 1 推荐硬件 2 配置回声探测仪模块 3 连接ArduPilot硬件 4 参数说明 前言 KOGGER 声纳(KOGGER Sonar)是一款结构紧凑、成本低廉的水下回声测深仪模块&#xff0c;带有 UART 接口&#xff0c;电源电压为 5-14v。 1 推荐硬件 CP210x USB->UART 转换器和安装…

脚本应使用项目的主要语言编写

原文&#xff1a;Joo Freitas - 2024.03.24 这是我长时间以来的一个深感赞同的观点。 我参与过的几乎所有项目&#xff0c;都有我们编写的用于自动化重复性过程的脚本。然而&#xff0c;大多数脚本在几周后变得过时且难以维护&#xff0c;因为我们要么不再需要它们&#xff0…

Towhee 小记

文章目录 关于 Towhee✨ 项目特点&#x1f393; 快速入门流水线预定义流水线自定义流水线 &#x1f680; 核心概念 关于 Towhee Towhee 是一个开源的 embedding 框架&#xff0c;包含丰富的数据处理算法与神经网络模型。通过 Towhee&#xff0c;能够轻松地处理非结构化数据&am…

31---JTAG电路设计

视频链接 JTAG电路设计&#xff08;JLINK&XILINX&ALTERA&#xff09;_哔哩哔哩_bilibili JTAG电路设计 1、JTAG简介 JTAG&#xff08;Joint Test Action Group&#xff09;&#xff1a;联合测试工作组&#xff0c;是在名为标准测试访问端口和边界扫描结构的IEEE的标…

Python学习之-正则表达式

目录 前言&#xff1a;1.re.serach1.1例子&#xff1a; 2.re.match2.1示例1&#xff1a;2.2 示例2&#xff1a; 3.re.findall3.1 示例 4.re.fullmatch4.1 示例1&#xff1a;4.2 示例2: 5.re.split5.1 示例1:5.2 示例2&#xff1a;5.3 示例3&#xff1a; 6.re.sub6.1 示例&#…

2024年阿里云服务器价格30元、61元、99元、165元、199元报价

2024年阿里云服务器优惠价格表&#xff0c;一张表整理阿里云服务器最新报价&#xff0c;阿里云服务器网aliyunfuwuqi.com整理云服务器ECS和轻量应用服务器详细CPU内存、公网带宽和系统盘详细配置报价单&#xff0c;大家也可以直接移步到阿里云CLUB中心查看 aliyun.club 当前最新…

【详细讲解React 快速入门教程】

&#x1f525;博主&#xff1a;程序员不想YY啊&#x1f525; &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家&#x1f4ab; &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 &#x1f308;希望本文对您有所裨益&#xff0c;如有…

虚机无法进入系统一直轮转在内核启动页面处理

【问题现象】 在日常处理虚机过程中会出现&#xff0c;虚机无法进入系统&#xff0c;一直轮转在内核启动页面的情况 【处理办法】 【步骤一】登录原先内核系统&#xff0c;设置默认新内核启动 【步骤二】进入系统后设置 # grubby --set-default /boot/vmlinuz-3.10.0-957.ax…

Healix Protocol 的 HLX 通证预售:医疗领域的未来展望

Healix Protocol推出 HLX 通证预售&#xff0c;将带来医疗领域的重要变革。通过其区块链技术&#xff0c;Healix Protocol致力于重新定义医疗服务的可及性与负担性&#xff0c;成为医疗行业的希望之光。该项目旨在增强透明度、可及性和效率&#xff0c;推动医疗体系向更加公平和…

[计算机效率] 文件预览工具:QuickLook

3.9 文件预览工具&#xff1a;QuickLook Quicklook是一款强大的文件预览工具&#xff0c;可以帮助用户快速浏览文件夹中的文件内容&#xff0c;而无需打开每个文件。 功能特点&#xff1a; 快速预览&#xff1a;Quicklook能够快速预览文件夹中的文件内容&#xff0c;包括文本…

把本地文件上传到HDFS上操作步骤

因为条件有限&#xff0c;我这里以虚拟机centos为例 实验条件&#xff1a;我在虚拟机上创建了三台节点&#xff0c;部署了hadoop&#xff0c;把笔记本上的数据上传到hdfs中 数据打包上传到虚拟机节点上 采用的是rz命令&#xff0c;可以帮我们上传数据 没有的话可以使用命令安装…

虹科Pico汽车示波器 | 免拆诊断案例 | 2018款东风风神AX7车发动机怠速抖动、加速无力

一、故障现象 一辆2018款东风风神AX7车&#xff0c;搭载10UF01发动机&#xff0c;累计行驶里程约为5.3万km。该车因发动机怠速抖动、加速无力及发动机故障灯异常点亮而进厂维修&#xff0c;维修人员用故障检测仪检测&#xff0c;提示气缸3失火&#xff1b;与其他气缸对调点火线…

Questasim 跑自动化脚本使用教程

自动化脚本使用 1.日常工程的自动化脚本程序&#xff0c;一共需要两个文件.do和.文件bat sim.do文件如下 #删除work工作目录 file delete -force work#设置uvm环境变量&#xff0c;指定uvm的dpi位置 set UVM_HOME C:/questasim64/verilog_src/uvm-1.1d set UVM_DPI_HOME …

Python实现一个简单的银行管理系统GUI应用

介绍 在本教程中&#xff0c;我们将创建一个基本的银行管理系统GUI应用&#xff0c;用户可以通过图形界面执行各种银行操作。我们将使用Python编程语言和Tkinter库来实现此应用。 使用说明 需要安装Python解释器&#xff0c;以及PythonCharm &#x1f449; 点我去下载 效果图…

ssm网上订餐管理系统开发mysql数据库web结构java编程计算机网页源码eclipse项目采用线性算法

一、源码特点 ssm 网上订餐管理系统是一套完善的信息系统&#xff0c;结合springMVC框架完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模…

前端学习--品优购项目

文章目录 前端学习--品优购项目1.案例铺垫文件建立与命名必备文件网站favicon图标网站TDK三大标签SEO优化常用命名 2.LOGO SEO优化3.实际代码 前端学习–品优购项目 1.案例铺垫 文件建立与命名 一个项目中为了方便实用和查找内容会有多个文件夹&#xff0c;比如images文件夹中…

java数据结构与算法刷题-----LeetCode540. 有序数组中的单一元素

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 1. 异或运算2. 全数组二分查找异或奇偶3. 偶数下标二分查找 1. 异…

算法之美:二叉树演进之多叉树及B-Tree树原理

在上篇文章我们了解了平衡二叉树的优势&#xff0c;了解到平衡二叉树能够对不平衡的节点施加旋转&#xff0c;使得树达趋于平衡&#xff0c;以提升查询效率&#xff0c;操作效率很高&#xff0c;与之同时也存在着不少的问题&#xff0c;例如我们在实际使用中会通常会将树加载到…

RiPro主题-子主题huzao-child美化包v4.0带更新,附下载插件

压缩包里包含子主题下载插件演示数据 V4.0更新内容如下 1、左下角会员推广广告悬浮集成到后台 2、底部悬浮登录增加是否登录判断 3、在线申请友链页面美化 4、手机端底部版权信息被遮挡优化 5、部分bug修复及细节优化 源码下载 RiPro主题-子主题huzao-child美化包v4.0带…