首页 >> 行业资讯 > 学识问答 >

问c 语言函数的三种调用方式 传参考点详解

2026-11-05 08:42:00

答

c 语言函数的三种调用方式,是期末考试和笔试高频考点,也就是传值调用 传地址调用 引用调用,注意纯标准 C 语言本身没有 C++ 的引用语法,很多教材为了和 C++ 对比,依然把这三类放在一起讲解,考试最核心重点是传值调用和传地址调用,两者最大区别就是函数内部能不能修改主调函数里面原始变量的值。传值调用是把实参复制一份传给形参,形参是独立副本,函数修改形参不会影响外面实参;传地址调用是把变量内存地址传给指针形参,函数内部通过地址解引用,可以直接修改主函数原始变量;引用调用是 C++ 语法,使用 & 作为引用别名,本质和传地址效果类似,但是写法不一样,纯 C 语言考题如果明确是 C 语言,一般只考传值调用和传地址调用,出题经常用交换两个数字的经典案例,对比三种调用方式运行结果,属于读程序写结果必考题型,理解栈帧和副本这个底层原理之后,就不会混淆三种调用方式的区别。

三种调用方式详细说明

传值调用

实参的值复制一份传递给形参,形参和实参占用不同内存单元,是独立副本,函数内部所有修改都只作用在副本上,函数结束之后副本销毁,主调函数原始变量保持不变。这是 C 语言默认的传参方式,绝大多数普通函数都是传值调用。

传地址调用(传指针调用)

实参传递变量的内存地址,形参定义为指针类型,函数内部通过 指针 解引用,访问并且修改原内存空间里面的数据,可以改变主调函数原始变量的值,交换两个变量就是这个方式最经典案例。

引用调用

属于 C++ 特有语法,形参前面加 &,代表形参是实参的别名,两个名字指向同一块内存,不需要写指针解引用,代码写法比传指针简洁,纯 C 语言不支持引用调用,考题如果是 C 语言试卷,一般只是作为对比知识点出现。

核心对比表格

调用方式实参传递内容形参类型能否修改原变量是否 C 语言原生支持
传值调用变量的值普通变量不能是
传地址调用变量的内存地址指针可以是
引用调用变量别名带 & 引用可以否,C++ 语法

经典交换数字代码示例

传值调用代码(交换失败)

include

void swap(int a, int b)

{

int t;

t = a;

a = b;

b = t;

}

int main()

{

int x = 3, y = 5;

swap(x,y);

printf("%d %d",x,y);

return 0;

}

运行结果仍然是 3 5,因为只是副本交换,原始 x y 没有变化。

传地址调用代码(交换成功)

include

void swap(int a, int b)

{

int t;

t = a;

a = b;

b = t;

}

int main()

{

int x = 3, y = 5;

swap(&x,&y);

printf("%d %d",x,y);

return 0;

}

运行结果是 5 3,通过指针解引用修改原始内存。

底层原理深度讲解

函数调用的时候会创建独立栈帧,传值调用会在栈帧里面新建形参副本,实参和形参内存互相独立,所以函数返回之后副本就销毁,外部变量不受影响。传地址调用,栈帧里面保存的是地址,虽然指针本身也是副本,但是指针里面存放的地址指向主函数原来变量的内存,解引用操作直接访问原内存,所以可以修改原值。

考试经常挖坑,很多同学误以为只要写了指针就一定能修改原值,如果只是修改指针本身的值,没有解引用,依然不能修改原变量,这个是高频易错陷阱。

常见易错点汇总

错误类型错误描述修正方式
混淆传值和传地址认为只要调用 swap 就可以交换数字传值调用不能修改原变量,必须传地址
把引用调用当成 C 语言语法在纯 C 代码写 int &a 编译报错引用调用是 C++ 语法,纯 C 不支持
只修改指针本身函数里面改变指针指向,不解引用想要修改原数据必须 * p 解引用
实参没有取地址调用的时候直接写变量,没有写 & 变量传地址调用实参必须传变量地址

拓展补充

除了交换数字,传地址调用还经常用于数组传参,数组名本身就是首地址,函数内部可以修改数组里面元素,数组传参本质也是传地址调用。如果函数需要返回多个结果,C 语言没有多返回值,一般就是使用传地址调用,通过指针带出多个结果,这也是传地址调用最重要的应用场景。

【常见问题】

问题 1 c 语言函数的三种调用方式分别是什么

回答 1 c 语言函数的三种调用方式指传值调用 传地址调用 引用调用,其中引用调用属于 C++ 语法,纯 c 语言函数的三种调用方式考点,重点掌握传值调用和传地址调用。

问题 2 c 语言函数的三种调用方式里面哪一种可以修改主函数变量

回答 1 c 语言函数的三种调用方式里面,传地址调用和引用调用可以修改主函数原始变量,传值调用只能修改副本,不能改变外部原始变量,这是 c 语言函数的三种调用方式核心考点。

问题 3 为什么 c 语言函数的三种调用方式里面引用调用不能在标准 C 运行

回答 1 c 语言函数的三种调用方式里面引用调用是 C++ 新增语法,使用 & 别名机制,标准 c 语言没有这个语法,所以纯 c 语言代码写引用调用会编译报错,c 语言函数的三种调用方式考题一般只是对比记忆。

问题 4 c 语言函数的三种调用方式经典例题是什么

回答 1 c 语言函数的三种调用方式最经典例题就是 swap 交换两个数字,通过对比传值调用交换失败,传地址调用交换成功,理解 c 语言函数的三种调用方式的区别,是期末考试读程序题高频题。

【免责申明】

本文内容仅作为 c 语言函数的三种调用方式备考学习参考,不同教材表述略有差异,部分试卷只承认传值调用和传地址调用两种,做题以本校教材大纲为准,代码示例适配主流 gcc 环境,学习使用产生的相关问题由使用者自行承担。

 

相关阅读

最新文章
站长推荐