c 语言三种函数调用方式是函数章节考试高频考点,按照参数传递机制划分,分别是值调用,地址调用,引用调用,这里要特别注意,标准 C 语言本身没有引用调用,引用调用是 C++ 的语法,很多教材题目会把这三种放在一起对比,考试经常要求区分,值调用也就是传值,把实参的值复制一份传给形参,函数内部修改形参不会影响原来实参;地址调用也就是传地址,把变量内存地址传给形参指针,函数内部通过指针解引用,可以修改原来实参的值,这是标准 C 语言里面实现类似引用效果的写法;引用调用是 C++ 增加的引用语法,形参写成引用别名,函数内部修改形参等价修改原变量,标准 C 不能使用。很多同学容易混淆,把传地址和传引用当成同一种,虽然最终效果都是修改原变量,但是底层语法形式不一样,考试答题要看清楚题目是否限定标准 C 语言。
三种方式详细说明
值调用(传值调用)
实参把数值副本传递给形参,形参和实参是两块独立内存,函数内部修改形参,不会改变主函数原始变量,基础入门实验大部分函数都是这种调用方式。
地址调用(传地址调用,也叫传指针调用)
实参传入变量的内存地址,形参定义成指针,函数内部通过指针解引用操作,直接改动原变量内存里面的数据,可以实现主函数变量同步修改。
引用调用
属于 C++ 语法,形参前面加 &,形参相当于原变量别名,操作形参就是操作原变量,标准 C 语言不支持该写法,教材对比题经常拿它和传地址做对照。
对比表格
调用方式 语法特点 能否修改原实参 所属语言
值调用 传递数值副本 不能 标准 C
地址调用 传递地址,形参为指针 可以 标准 C
引用调用 形参加 & 别名 可以 C++
理解学习步骤
第一步 掌握值调用,理解副本独立内存,这是最基础调用形式
第二步 学习指针传地址,掌握指针解引用修改原变量
第三步 区分 C++ 引用调用,明白标准 C 没有引用语法,不要在 C 代码写 & 引用形参
第四步 结合交换两个数字实验,经典例题就是用传值交换失败,传指针交换成功,这个例题经常出实验报告
重点注意事项
第一 标准 C 语言不存在引用调用,如果试卷明确是 C 语言,三种里面只有值调用和地址调用是 C 支持
第二 传地址的时候,实参必须取地址 &,形参必须是指针类型
第三 值调用不是错误,只是不能回传修改结果,不要误以为值调用不能用
第四 交换两数经典题,传值版本交换无效,是考试最常考辨析题
第五 部分教材表述名称略有差别,有的叫传值调用,传址调用,引用调用,答题按照课本名称书写
【常见问题】
问题 1 c 语言三种函数调用方式里面标准 C 支持引用调用吗
回答 1 c 语言三种函数调用方式里面,引用调用是 C++ 语法,标准 C 语言并不支持,C 语言想要修改原实参只能使用地址调用也就是传指针。
问题 2 c 语言三种函数调用方式值调用为什么不能改变原变量
回答 1 c 语言三种函数调用方式的值调用是传递数值副本,形参和实参是独立内存空间,函数内部修改副本,不会影响主函数原来变量。
问题 3 c 语言三种函数调用方式地址调用原理是什么
回答 1 c 语言三种函数调用方式的地址调用是把变量内存地址传给指针形参,函数通过指针解引用,直接操作原变量内存,所以可以修改主函数原始数据。
【免责申明】
本文内容仅用于 c 语言课程考试学习参考,不同教材命名表述存在差异,若题目明确限定标准 C 语言,请按照教材考点作答,因教材表述差异造成答题错误,相关风险由使用者自行承担。


