c++怎么把数组传给函数_c++指针传参和引用传参【详解】-C++

数组名传参本质是退化为指针,void func(int arr[]) 实际等价于 void func(int* arr),sizeof(arr) 返回指针大小而非数组大小,需额外传size参数。

数组名传参本质是退化为指针

在 C++ 中,void func(int arr[]) 看起来像传数组,实际编译器会把它重写成 void func(int* arr) —— 也就是只传首元素地址。这意味着函数内 sizeof(arr) 永远是 sizeof(int*)(通常 8 字节),不是原数组大小。你无法靠形参推导出数组长度,必须额外传一个 size 参数。

常见错误现象:for (int i = 0; i 在函数内部永远只循环 1 或 2 次(取决于指针大小和 int 大小),导致越界或漏处理。

  • 适用场景:C 风格接口、性能敏感且长度已知的底层操作
  • 注意:不能用 arr[5] 访问时做边界检查,因为编译器不校验
  • 若原数组是 const int a[10],建议声明为 void func(const int* arr, size_t n),明确意图

用引用传参保留数组类型和大小信息

写成 void func(int (&arr)[10]) 就能真正“传数组”——形参是引用,绑定到实参数组,sizeof(arr) 返回 40(假设 int 是 4 字节),std::extent_v<decltype></decltype> 也能拿到 10。这是唯一能让函数感知原始维度的方式。

但问题也很直接:模板参数必须完全匹配。传 int a[10] 可以,传 int b[11] 或 std::vector<int></int> 就编译失败。

立即学习“C++免费学习笔记(深入)”;

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » c++怎么把数组传给函数_c++指针传参和引用传参【详解】-C++
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1392+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4002087+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1392+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4002088+
  • 本周更新: 0+
  • 最后更新: 2026-03-16