下面有关函数参数的说法,正确的是( )。
这题考函数参数传递的本质区别,拿到题先分清是传值还是传地址,值传递是拷贝,改副本不影响原变量,地址传递改的就是原变量。
大多数同学容易凭直觉选 B,觉得'传递过去'好像就共享了内存,其实值传递只是把值拷贝了一份,子函数里动来动去都是动那个副本;还有选 C 的,把地址传递理解反了,地址传递恰恰是为了让子函数能改主函数的值,说'不改变'完全错;D 选项更是基础规则,参数个数不匹配编译都过不了。
【考点】函数参数传递:值传递与地址传递的区别
本题考查 C++ 函数基础中参数传递的核心概念,命题人特意把'值传递'和'地址传递'放在一起对比,想看看你是否真的理解它们底层发生了什么。值传递的本质是'拷贝',主函数里的变量值被复制一份传给子函数,子函数里改的是这份副本,主函数的原变量毫发无损;地址传递(传指针)的本质是'共享',主函数把变量的地址传过去,子函数拿到的是原变量的入口,改的就是主函数里的原变量。
拿到题先判断传递方式:看到'采用值传递方式'这几个字,马上锁定 A 和 B,因为 C、D 说的都是地址问题或者参数个数问题,跟题干条件无关。值传递下,子函数改参数,主函数参数不变,所以 A 对、B 错。C 选项说'将参数的地址传递给子函数,若子函数将参数值改变,主函数当中的参数值将不改变',这明显是把地址传递的效果说反了,地址传递恰恰是为了让子函数能改主函数的值,所以 C 错。D 选项说'可以不满足子函数的参数个数要求',这违反函数调用的基本规则,参数个数必须匹配,所以 D 错。
这里有个容易绕进去的陷阱:很多同学看到'传递'两个字就以为数据会'流'到子函数里变成一样的,其实值传递只是把值'搬'了一份过去,子函数里动来动去都是动那个副本,原变量根本没被触碰。命题人喜欢在这种细节上挖坑,比如把值传递说成'共享',或者把地址传递说成'不改变',都是想测试你是否真正理解底层机制。
如果题目改成'子函数改变参数值后,主函数参数也变了,说明是什么传递方式?',答案就是地址传递。刷到这类题,先问自己'修改能否回传主函数',能回传就是地址传递,不能回传就是值传递。这个判断逻辑比死记硬背选项要牢靠得多。
【考频与趋势】函数与递归在题库中累计考了 67 题,覆盖 8 个级别,2025 年考了 21 题,2024 年 18 题,2023 年 13 题,呈现逐年上升趋势;函数定义与调用考了 70 题,2025 年 23 题,2024 年 17 题,2023 年 15 题,同样在增加。说明参数传递这类基础概念是高频考点,且难度在慢慢提升。
【预测】基于近年数据,参数传递相关题目在四级、五级中会继续高频出现,命题人可能会结合数组传参、引用传值等更复杂场景来考查,比如'函数内修改数组元素,主函数是否可见'这类问题。建议重点强化值传递与地址传递的本质区别,以及参数个数匹配规则,避免在细节上掉坑。