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

C++中arr[5]与5[arr]这两个cout语句对数组的处理是否一致?

arr[5] 和 5[arr] 在C++中是否等价?

放心,这两行代码完全等价,在C++(以及C语言)的语法规则里,数组下标运算符[]其实是一层语法糖,背后的逻辑非常清晰:

对于表达式a[b],编译器会把它解析成*(a + b)——这里的数组名arr会被隐式转换成指向数组第一个元素的指针,而加法运算遵循交换律,所以*(a + b)和*(b + a)是完全相同的内存访问操作,自然a[b]就等价于b[a]。

拿你给出的代码举例:

int arr[] = {1,2,3,4,5,6};
cout << arr[5] << endl;
cout << 5[arr] << endl;

arr[5]是取数组下标为5的元素(也就是第6个元素,值为6);5[arr]本质是*(5 + arr),和*(arr + 5)指向的是同一块内存地址,所以输出结果必然一致。

至于你遇到的数组越界情况,不管是arr[n]还是n[arr],只要n超出了数组的有效下标范围,都会访问到数组内存之外的未知区域,这种行为在C++里属于未定义行为,所以两者都输出“垃圾值”也完全符合预期——本质上它们做的是一模一样的非法内存访问操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 15:52:42