c++入门:函数实参形参傻傻分不清?如何改变实参!

张开发
2026/4/3 23:00:21 15 分钟阅读
c++入门:函数实参形参傻傻分不清?如何改变实参!
值传递是 C 中最基本的参数传递方式。它的核心意思是当你把一个变量作为参数传给函数时函数得到的是这个变量的一个副本而不是变量本身。所以在函数内部修改这个副本外部的原变量纹丝不动。 举个生活例子你把一张照片的复印件交给朋友朋友在复印件上画画。你手里的原照片一点没变。这里的复印件就是“形参”你手里的原照片就是“实参”。void change(int x) { // x 是形参 x 100; // 修改的是 x } int main() { int a 10; change(a); // 把 a 的值“复印”一份给 x cout a endl; // a 还是 10 }为什么 a 没变因为当调用change(a)时系统在内存中新建了一个变量x并把a的值10复制给x。从此x和a就是两个独立的变量只是初始值相同。在函数内修改x完全不影响外面的a。比喻你有一张写着数字10的纸条a。你把它复印了一份x然后在复印件上改成100。原来的纸条依然是10没有变化。 如何修改实参两种常用方法如果我们希望函数内部能够改变外面的变量就需要让函数“拿到”变量本身而不是复印件。C 提供了两种方式指针传递和引用传递。二者的重点都在于函数的参数列表1. 指针传递传地址void change(int *p) { // p 是一个指针存储地址 *p 100; // 通过地址找到变量修改它 } int main() { int a 10; change(a); // 把 a 的地址交给函数 cout a endl; // 输出 100a 被修改了 }解释a是 a 的地址可以想象成 a 家的门牌号。函数收到地址后用*p去“敲门”直接修改了 a 家的值。比喻你直接告诉别人你家的门牌号地址他按地址找到你家进去把数字改成100。这样原来那张纸条a上的数字就变了。2. 引用传递C 特有更简洁void change(int x) { // x 是 a 的别名引用 x 100; // 修改 x 就是修改 a } int main() { int a 10; change(a); // 直接传 a但函数参数是引用 cout a endl; // 输出 100 }解释int x表示 x 是某个整数的“别名”。在调用时x直接绑定到a所以对x的操作就是对a的操作。这就像给 a 起了个小名叫小 a叫小 a 就是叫 a。比喻你给变量 a 取了个外号叫“x”叫“x”的时候就是在叫 a。所以改 x 就是改 a。 总结值传递形参是实参的副本修改形参不影响实参。要修改实参必须传递地址指针或使用引用。引用在 C 中更常用因为它写法简单且能明确表达“我要修改实参”的意图。

更多文章