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

C++中引用参数与数组传参的疑问解析

数组参数无需&就能修改元素的原因

你对引用参数的理解是对的:值传递时函数拿到的是变量副本,修改不会影响原变量;引用传递则直接操作原变量的内存,能修改目标参数。比如:

值传递代码:

void test(int x)  {
  x++;
}
int main()  {
  int number = 0;
  test(number);
  cout<<number;
}

这段代码输出0,因为x是number的副本,修改x不影响原变量。

引用传递代码:

void test(int& x)  {
  x++;
}
int main()  {
  int number = 0;
  test(number);
  cout<<number;
}

这段代码输出1,因为x是number的引用,直接操作原变量内存。

回到你的问题:这不是数组独有的特性,本质是数组作为函数参数时会被隐式转换成指向首元素的指针。

当你写void genericF(int aC[], int n, int& total)时,编译器会把int aC[]等价处理成int* aC——也就是说,你传递数组的时候,实际传递的是数组第一个元素的地址。函数内部通过aC[stoi(line)]++操作时,本质是通过指针访问原数组的内存空间,自然能修改原数组的元素。

这种设计是C++继承自C的特性,目的是避免拷贝整个大数组带来的性能浪费。但要注意,此时函数内部无法直接获取数组的完整长度,所以必须像你的代码一样额外传递长度参数n。

你的genericF代码:

void genericF(int aC[], int n, int& total) {
    fstream info;
    string line;
    info.open("sample.txt");
    while (getline(info, line)) {
        if (stoi(line) < n) {
            total++;
            aC[stoi(line)]++;
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 22:40:39