函数通过调用获得程序的控制权,函数的参数是调用者与函数的数据接口。函数可以定义一个或多个参数,也可以省略参数,调用时将与参数的数据类型相匹配的数据置于参数列表中,即可在函数体内使用。参数的调用有多种形式,对函数的影响也有不同的结果。

5.3.1 形式参数 与 实际参数

形式参数 是 接口数据的目的地,实际参数是接口数据的来源地。函数定义时出现在参数列表中的参数是形式参数,函数体通过引用形式参数获得接口数据。函数调用时填入的参数是实际参数,实际参数由调用
者提供。形式参数与实际参数的数据类型必须一致,同时还需要注意实际参数的个数和位置要与形式参数相同。

5.3.2 赋值调用 与 引用调用

赋值调用 与 引用调用 是传递数据给函数的2种形式,前者是将实际参数的数值传递给形式参数,后者是将实际参数的内存地址传递给形式参数。赋值调用不会改变实际参数原有的数值,而引用调用则可能改变实际参数的数值。使用引用调用时,参数的类型需设置为指针,如下例所示:

#include <stdio.h>

void func(int a, int *b)	// 定义函数的形式参数,a 为整形,b 为整形指针
{
a = 199; // 给形式参数 a 赋值
*b = 299; // 给形式参数 *b 所指向的内存单元赋值
} int main ()
{
int a = 0, b = 0; // 声明整形变量 a 和 b,并赋值
printf("a = %d, b = %d\n", a, b); // 第一次输出变量 a 和 b 的值
func(a, &b); // 将变量 a 的值 和 变量 b 的地址作为实际参数传递给函数
printf("a = %d, b = %d\n", a, b); // 第二次输出变量 a 和 b 的值
return 0;
}

输出结果:

a = 0, b = 0
a = 0, b = 299

func() 函数定义了 2个参数,参数 a 为整型,参数 b 为整型变量。main()函数将变量 a 的数值和变量 b 的地址作为实际参数传递给 func() 函数。在 func() 函数体内,形式参数 a 的数值 和 b所指向内存单元的数值被改变。func() 函数调用结束后,将控制权还给 main() 函数。因为 main() 函数内的变量 a 是以赋值调用的形式传递给 func() 函数的,所以 func() 函数修改形式参数 a 的值并不会对实际参数 a 的值做任何改变。而 main() 函数将变量 b 的地址作为实际参数传递给 func() 函数,形式参数 b 获得了变量 b 的内存地址,通过间接引用修改了变量 b 的值。

【C语言入门教程】5.3 函数的调用 与 参数的更多相关文章

  1. Go语言入门教程(十)之函数

    Hello 各位小伙伴大家好,我是小栈君,假期一眨眼就过去了.不知道大家玩的是否开心呢? 上次我们讲到了关于Go语言的流程控制,小栈君也希望小伙伴跟着小栈君一步一个脚印的敲一下代码,相互进步.本期我们 ...

  2. 《Ruby语言入门教程v1.0》学习笔记-01

    <Ruby语言入门教程v1.0> 编著:张开川 邮箱:kaichuan_zhang@126.com 想要学习ruby是因为公司的自动化测试使用到了ruby语言,但是公司关于ruby只给了一 ...

  3. C语言入门教程-(5)格式化输入输出

    1.输入和输出 在程序的使用中,我们经常可以看的这么一个场景:用户需要输入数据,经过程序运算,得到结果后输出.在C语言中,输入数据和输出数据都是由库函数完成的,通过语句来输入/输出. 2.格式化输出— ...

  4. 《JavaScript语言入门教程》记录整理:入门和数据类型

    目录 入门篇 js介绍 历史 基本语法 数据类型 概述 null 和 undefined 数值 字符串 对象 函数 数组 本系列基于阮一峰老师的<JavaScrip语言入门教程>或< ...

  5. 《JavaScript语言入门教程》记录整理:运算符、语法和标准库

    目录 运算符 算数运算符 比较运算符 布尔运算符 二进制位运算符 void和逗号运算符 运算顺序 语法 数据类型的转换 错误处理机制 编程风格 console对象和控制台 标准库 Object对象 属 ...

  6. 《JavaScript语言入门教程》记录整理:面向对象

    目录 面向对象编程 实例对象与 new 命令 this关键字 对象的继承 Object对象的方法 严格模式(strict mode) 本系列基于阮一峰老师的<JavaScrip语言入门教程> ...

  7. 智能合约语言 Solidity 教程系列3 - 函数类型

    Solidity 教程系列第三篇 - Solidity 函数类型介绍. 写在前面 Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊.智能合约有所了解,如果你还不了解,建议你先看以 ...

  8. Linux pwn入门教程(10)——针对函数重定位流程的几种攻击

    作者:Tangerine@SAINTSEC 本系列的最后一篇 感谢各位看客的支持 感谢原作者的付出一直以来都有读者向笔者咨询教程系列问题,奈何该系列并非笔者所写[笔者仅为代发]且笔者功底薄弱,故无法解 ...

  9. c语言该怎么入门?C语言入门教程(非常详细)

    C语言是一门面向过程的编译型语言,它的运行速度极快,仅次于汇编语言.C语言是计算机产业的核心语言,操作系统.硬件驱动.关键组件.数据库等都离不开C语言:不学习C语言,就不能了解计算机底层. 这套「C语 ...

  10. Go 语言入门教程,共32讲,6小时(已完结)

    Go语言入门教程,共32讲,6小时(完结) 在B站:https://www.bilibili.com/video/BV1fD4y1m7TD/

随机推荐

  1. xpath中/和//的差别

    xpath中 "/"是在子节点中查找,"//"是在所有子节点中查找,包括子节点的子节点. example: leve1/leve2:得到文本leve2 leve ...

  2. Delicious Retouch 3

    今天发现一个photoshop的插件:Delicious Retouch 3,磨皮的,特好用,各种磨皮方法的合集.今后都不敢说自己会磨皮了. 插件的界面 插件的使用教程 链接:http://pan.b ...

  3. 【Beta版本】冲刺-Day3

    队伍:606notconnected 会议时间:12月11日 目录 一.行与思 二.站立式会议图片 三.燃尽图 四.代码Check-in 一.行与思 张斯巍(433) 今日进展:学习了很多androi ...

  4. Linux下,使用Git管理 dotfiles(配置文件)

    1.管理你的 dotfiles 作为一个计算机深度使用者,并且长期使用 Linux 作为主要操作系统,折腾各种功能强大的软件是常有的事儿.这些软件有它们各自的配置文件,通常以 . 开头,因此有人管它们 ...

  5. OpenGLES入门笔记三

    在入门笔记一中比较详细的介绍了顶点着色器和片面着色器. 在入门笔记二中讲解了简单的创建OpenGL场景流程的实现,但是如果在场景中渲染任何一种几何图形,还是需要入门笔记一中的知识:Vertex Sha ...

  6. JS判断是wap端访问网站还是PC端访问,然后进行自动跳转的代码

    <script type="text/javascript"> function goPAGE() { if ((navigator.userAgent.match(/ ...

  7. CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡

    一.简介 VS/NAT原理图: 二.系统环境 实验拓扑: 系统平台:CentOS 6.3 Kernel:2.6.32-279.el6.i686 LVS版本:ipvsadm-1.26 keepalive ...

  8. OC面向对象特性: 继承

    基础知识 1.标识符是有字母,数字,下划线组成的. 2.首字母只能是字母,下划线,不能为数字. 3.标识符要做到见名之意. 4.标识符不能使用已定义的关键字和预定义标识符. 继承 继承:子类可以直接访 ...

  9. JavaScript格式化日期

    查找格式化日期的方法大都是写日期扩展方法,也许是为了维持jquery easyUI 源码完整性, // 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).小时(h ...

  10. JAVA 的普通加法运算

    利用Scanner类,其中数字输入的函数,利用while循环结构来得到输入的实数,当输入的是字母时,结束循环 源代码: package ccc;import java.util.*;public cl ...