You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何C++中void函数修改数组会影响外部,修改int变量却不会?

问题原因分析:值传递 vs 数组退化为指针

你看到的结果是C++中两种参数传递机制的差异导致的:

1. 为什么myFunction2没修改main里的变量c?

当你调用myFunction2(c)时,参数采用的是值传递:函数会创建参数a的副本,把c的值(也就是2)复制给这个副本。函数里执行的a = a+2,只是修改了这个副本的值,完全不会影响main函数里的原变量c。所以函数执行完,c还是原来的2。

2. 为什么myFunction能修改数组的首元素?

C++里数组作为函数参数时,会自动退化为指向数组首元素的指针。也就是说,你写的void myFunction(int a[],int b)本质上等价于void myFunction(int* a,int b)。

当你传入myArray时,传递的是数组首元素的内存地址。函数里的a[0] = 100;其实是通过指针直接操作原数组所在内存里的元素,所以main函数里的myArray[0]会被直接修改成100,而不是保持原来的7。

如何让myFunction2修改原变量?

如果想让函数能修改main里的c,可以用引用传递或者指针传递:

引用传递方式:

void myFunction2(int& a) {
    a = a + 2;
}

调用时直接传c即可,函数会直接操作原变量。

指针传递方式:

void myFunction2(int* a) {
    *a = *a + 2;
}

调用时需要传变量的地址:myFunction2(&c);

内容的提问来源于stack exchange,提问作者Omid Abasi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 06:07:40