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

C++求和时指针参数传值而非地址?为何arr[i]可直接取值无需解引用

关于参数传递的疑问

你提到的逻辑完全正确,调用getAverage(balance, 5)时,形参的初始化逻辑等价于int *arr = balance:

  • C++中数组名在绝大多数场景下会自动隐式转换为数组首元素的指针,所以这里balance作为实参传递时,实际传入的就是数组首元素的内存地址
  • 形参int *arr接收这个地址后,arr本身就是存储了数组首地址的int类型指针

关于arr[i]取值的疑问

这是C/C++里下标运算符[]的内置语法糖特性:arr[i]本质上完全等价于*(arr + i),已经自动包含了指针偏移+解引用两步操作:

  1. 首先执行指针偏移:arr + i 等价于 首地址 + i * 元素类型字节数(若int占4字节则每次偏移4字节),得到第i个元素的内存地址
  2. 自动对偏移后的地址做解引用,直接拿到对应元素的int值

所以你完全不需要额外加*,如果写*arr[i]反而会编译报错:因为arr[i]已经是int类型的数值,不是指针,不能被解引用。如果不习惯下标写法,也可以把循环逻辑改成sum += *(arr + i);,运行效果和arr[i]完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:51:03