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

请教:C++中(&p)[7]的含义是什么?涉及ArrayDecay问题

关于C++中数组引用int (&p)[7]的解释

首先,int (&p)[7]表示一个指向包含7个int元素的数组的引用,这是C++里避免数组退化的关键写法之一。

核心作用

C++里普通函数接收数组参数时,数组会自动退化为指向首元素的指针,此时用sizeof只能拿到指针大小,而非数组本身的大小。但用数组引用作为参数时,不会触发退化,函数能直接获取原数组的完整类型信息。

语法拆解

  • [7]:定义了数组的类型——包含7个int元素的数组
  • (&p):括号是关键,它改变了优先级,让&先和p结合,确保p是上述数组类型的引用。如果去掉括号写成int &p[7],那会被解析成7个int引用组成的数组,而C++不允许定义引用数组,这种写法是非法的。

结合你的代码分析

在main函数里,sizeof(a)直接计算原数组的大小(若int占4字节,结果就是28)。调用fun(a)时,p是原数组a的别名,所以sizeof(p)同样会计算整个数组的大小,结果也是28,完全避免了数组退化导致的信息丢失。

和你熟悉的写法对比

你已经了解(*p)[](指向数组的指针)和*p[](指针数组),它们和(&p)[]的核心区别是:

  • (*p)[]是独立的指针变量,存储数组的地址
  • (&p)[]是原数组的别名,和原数组共享内存,没有额外存储开销

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 02:35:21