GESP 四级 · GESP 202309 C++ 四级 第 19 题

判断题 · 答案 B · 考点:函数

← 整套速查表 GESP 四级 全部真题

题目

在 C++ 语言中,在函数调用时,通过引用传递的参数不会复制实际参数,因此不会额外占用内存。

答案:B

考点

函数

解题思维

这题考参数传递的本质开销。拿到题先分半句看:'不复制'对,'不占内存'错在哪?关键在引用本身也是栈上的变量,有地址就有空间,别被语法糖骗了。

常见错误

学生最容易把'不复制数据'直接等同于'不占内存',误选A。其实引用是形参的一种,函数调用时编译器会在栈上为它分配空间(通常4或8字节),它只是用这个空间存实参的地址,而不是存数据本身。很多人混淆了'值拷贝'和'变量存在'两个概念,以为没拷贝就不占地方,忽略了形参本身也是局部变量这一基本事实。

详细解析(节选)

【考点】函数参数传递机制|引用与指针的本质|栈内存开销

命题人挖坑很典型:前半句'不会复制实际参数'完全正确,后半句'不会额外占用内存'却把概念偷换。学生容易因为前半句对,就惯性选A,或者觉得引用是'直接访问'所以没开销,这是典型的被语法糖迷惑。

来拆解一下。C++里参数传递分三种:值传递、指针传递、引用传递。值传递是复制一份数据给形参,函数内改形参不影响实参;指针传递是把实参地址传给形参,函数里操作指针指向的地址能改实参,但指针变量本身也是形参;引用传递语法上像别名,但底层实现和指针几乎一样——形参是一个独立的变量,它保存的是实参的地址。

重点来了:既然引用形参是一个独立的变量,那它在函数帧里就得占空间。在32位环境下通常4字节,64位环境8字节。这个空间用来存地址,和它存什么值无关。哪怕你传的是整型、浮点型、数组,引用形参都只占这么点地址空间,不复制数据,但'变量存在'这个开销是实打实的。

反过来说,如果题目改成'通过指针传递不会额外占用内存',答案依然是错。指针和引用只是两种写法,本质都是形参变量,都占栈空间。命题人就是想让你区分'数据拷贝'和'变量开销'这两个维度。

思考路径很简单:先看传递方式是不是形参变量(是则占空间),再看有没有数据拷贝(值传有,指针/引用无)。这道题前半句满足'无拷贝',后半句却忽略了'有变量',所以整体错误。

考频趋势看,'指针与引用'是高频考点,2023年考了16题,2024年20题,2025年更是25题,说明命题组很爱在基础概念里埋陷阱,尤其是把'不复制'和'不占内存'混在一起考。这类题在GESP四级、五级、六级都常出现,属于必须拿下的基础分。

预测的话,基于近年数据,未来几年还会继续考'引用/指针是否占内存'这类辨析,可能会换个说法,比如'引用比值传递省内存'或者'引用不占额外空间',但核心还是让你分清'数据拷贝'和'形参变量'的区别。只要记住引用也是形参,占栈空间,这类题基本就稳了。

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断