如果把函数比喻成一台机器,那么参数就是原材料,返回值就是最终产品;从一定程度上讲,函数的作用就是根据不同的参数产生不同的返回值。

这一节我们先来讲解C语言函数的参数,下一节再讲解C语言函数的返回值。

C语言函数的参数会出现在两个地方,分别是函数定义处和函数调用处,这两个地方的参数是有区别的。
形参(形式参数)
在函数定义中出现的参数可以看做是一个占位符,它没有数据,只能等到函数被调用时接收传递进来的数据,所以称为形式参数,简称形参。
实参(实际参数)
函数被调用时给出的参数包含了实实在在的数据,会被函数内部的代码使用,所以称为实际参数,简称实参。

形参和实参的功能是传递数据,发生函数调用时,实参的值会传递给形参。
形参和实参的区别和联系

  1. 形参变量只有在函数被调用时才会分配内存,调用结束后,立刻释放内存,所以形参变量只有在函数内部有效,不能在函数外部使用。

  2. 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的数据,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参,所以应该提前用赋值、输入等办法使实参获得确定值。

  3. 实参和形参在数量上、类型上、顺序上必须严格一致,否则会发生“类型不匹配”的错误。当然,如果能够进行自动类型转换,或者进行了强制类型转换,那么实参类型也可以不同于形参类型。

  4. 函数调用中发生的数据传递是单向的,只能把实参的值传递给形参,而不能把形参的值反向地传递给实参;换句话说,一旦完成数据的传递,实参和形参就再也没有瓜葛了,所以,在函数调用过程中,形参的值发生改变并不会影响实参。

请看下面的例子:

#include <stdio.h>
//计算从m加到n的值
int sum(int m, int n) {int i;for (i = m+1; i <= n; ++i) {m += i;}return m;
}
int main() {int a, b, total;printf("Input two numbers: ");scanf("%d %d", &a, &b);total = sum(a, b);printf("a=%d, b=%d\n", a, b);printf("total=%d\n", total);return 0;
}

运行结果:
Input two numbers: 1 100↙
a=1, b=100
total=5050

在这段代码中,函数定义处的 m、n 是形参,函数调用处的 a、b 是实参。通过 scanf() 可以读取用户输入的数据,并赋值给 a、b,在调用 sum() 函数时,这份数据会传递给形参 m、n。

从运行情况看,输入 a 值为 1,即实参 a 的值为 1,把这个值传递给函数 sum() 后,形参 m 的初始值也为 1,在函数执行过程中,形参 m 的值变为 5050。函数运行结束后,输出实参 a 的值仍为 1,可见实参的值不会随形参的变化而变化。

以上调用 sum() 时是将变量作为函数实参,除此以外,你也可以将常量、表达式、函数返回值作为实参,如下所示:
total = sum(10, 98); //将常量作为实参
total = sum(a+10, b-3); //将表达式作为实参
total = sum( pow(2,2), abs(-100) ); //将函数返回值作为实参

  1. 形参和实参虽然可以同名,但它们之间是相互独立的,互不影响,因为实参在函数外部有效,而形参在函数内部有效。

更改上面的代码,让实参和形参同名:
#include <stdio.h>
//计算从m加到n的值

int sum(int m, int n) {int i;for (i = m + 1; i <= n; ++i) {m += i;}return m;
}
int main() {int m, n, total;printf("Input two numbers: ");scanf("%d %d", &m, &n);total = sum(m, n);printf("m=%d, n=%d\n", m, n);printf("total=%d\n", total);return 0;
}

运行结果:

Input two numbers: 1 100
m=1, n=100
total=5050

调用 sum() 函数后,函数内部的形参 m 的值已经发生了变化,而函数外部的实参 m 的值依然保持不变,可见它们是相互独立的两个变量,除了传递参数的一瞬间,其它时候是没有瓜葛的。

C语言形参和实参的区别(非常详细)相关推荐

  1. C语言形参和实参的区别

    形参(形式参数) 在函数定义中出现的参数可以看做是一个占位符,它没有数据,只能等到函数被调用时接收传递进来的数据,所以称为形式参数,简称形参. 实参(实际参数) 函数被调用时给出的参数包含了实实在在的 ...

  2. C语言形参跟实参详解

    形参与实参 今天我们来说下c语言形参与实参的区别,形参跟实参理解的话也很简单,但是好多同学关于这个知识点都是一知半解,没有真正的去透彻,一问都知道,但在真正引用的时候还会出现很多问题,而百度的时候又会 ...

  3. java中形参和实参的区别

    引用博客 引用博客 形参和实参的区别 形参 就是形式参数,用于定义方法的时候使用的参数,用来接收调用者传递的参数.形参只有在方法被调用的时候,虚拟机才会分配内存单元,在方法调用结束之后便会释放所分配的 ...

  4. java中实参和形参_java中形参和实参的区别

    实参和形参是程序设计语言中的通用概念,并不是只有C,C++有而JAVA没有.关于他们两者的区别你知道吗?下面是学习啦小编为大家准备的java中形参和实参的区别,希望大家喜欢! java中形参和实参的区 ...

  5. Java方法的形参和实参的区别

    Java方法的形参和实参的区别,可以通过以下示例理解,如下所示. 示例代码: package com.example.jdbctemplateproject.core;public class Tes ...

  6. c语言实参和形参占用存储单元_必须知道的C语言知识细节:函数形参和实参的区别...

    当你选择了一种语言,意味着你还选择了一组技术.一个社区.--Joshua Bloch C语言中函数形参和实参是十分重要的概念,初学者很容易混淆. 形参:顾名思义,形式参数,仅仅是声明了参数的类型和参数 ...

  7. 1、关于形参与实参的区别与理解

    在弄清形参与实参的时候,遇到了这样一段代码,表示不能理解,网上找了一下,摘录了原文解释 int a=1: int &b = a; 这是C++的引用,引用只能在定义的时候被赋值,这个定义的意思就 ...

  8. java 形参和实参_Java——形参和实参的区别

    形参出现在函数定义中,在整个函数体内都可以使用,离开该函数则不能使用. 实参出现在主调函数中,进入被调函数后,实参变量也不能使用. 形参和实参的功能是作数据传送.发生函数调用时,主调函数把实参的值传送 ...

  9. Java中 形参 和 实参 的区别:

    形参(parameter): 全称为"形式参数" ,由于它不是实际存在变量,所以又称虚拟变量. 实参(argument): 全称为"实际参数",是在调用时传递给 ...

最新文章

  1. xilinx axi dma 深入开发(一)
  2. 信息安全风险评估实施
  3. 送书 | 生物信息学习的一点体会
  4. Windows编译环境搭建(VS2010)
  5. JVM的方法区和永久带是什么关系?
  6. 如何更好的使用大数据
  7. maxdea如何计算指数_MaxDEA
  8. linux测试wifi信噪比,无线网络中信噪比(SNR)计算
  9. jetson nano 电源_Jetson Nano必读-第二站:电源
  10. 技术类岗位面试中经典问题总结分享
  11. 裸看美剧必备英文词汇文章索引
  12. matlab生成的gif用ppt打开慢,【热文回顾】PPT太大,打开时太慢,编辑时卡顿,怎么办?...
  13. 关于组件之间使用provide和inject传值
  14. ADC 模数转换实验
  15. 另类办公Word2003也当“扫描大师”(转)
  16. 帝国CMS7.2 手机网站使用教程
  17. 数据库SQL实战 --43.将id=5以及emp_no=10001的行数据替换成id=5以及emp_no=10005
  18. rpmbuild告警mangling shebang in xxx from /bin/python to /usr/bin/python/python2.
  19. 无限制版电驴搜索器(绿色版)
  20. 关于Github上zheng项目部署问题总结

热门文章

  1. 固定屏幕显示模式 ScreenOrientation
  2. 正向代理和反向代理的区别Nginx配置虚拟主机流程(后续更新)
  3. 企业移动学习行业调研报告 - 市场现状分析与发展前景预测
  4. 【分类算法】什么是分类算法
  5. 天书奇谈手游怎么用电脑玩 天书奇谈手游安卓模拟器教程
  6. C字符串逆序、C++字符串逆序
  7. HTTP1和HTTP2的区别
  8. 【数据库索引背后的数据结构】一个常见的面试题,详解B+树结构
  9. 安装 VarDictJava
  10. android apn代码详解,android 代码设置apn