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

C++中i[str]访问字符数组的原理是什么?

解析C++中i[str]的数组访问原理

先看你给出的代码:

#include <iostream>
using namespace std;

int main()
{
    char str[]="ABCD";
    
    for(int i=0;str[i]!='\0';i++)
    {
        cout<<i[str]<<" ";
    }
    return 0;
}

这段代码里的i[str]能正常访问数组元素,核心原因在于C/C++对数组下标运算符的底层定义:

  • 数组下标[]本质是指针运算的语法糖。编译器会把a[b]直接翻译成*(a + b)——这里a是指针,b是整数偏移量,意思是从a指向的地址往后跳b个元素,再解引用取值。
  • 加法满足交换律,a + b和b + a的结果完全一致,所以*(a + b)等价于*(b + a),对应的a[b]自然就和b[a]是同一个意思。

放到你的代码里具体拆解:

  • str作为数组名,在表达式里会自动转换成指向数组第一个元素的指针(也就是&str[0])。
  • 常规写法str[i]等价于*(str + i),就是从首元素指针偏移i个位置后取值。
  • 而i[str]等价于*(i + str),和上面的表达式完全等价,所以能正确拿到str数组的第i个元素,最终输出A B C D。

不过要强调:这种写法虽然合法,但绝对不建议在实际代码中使用。它完全违背了代码可读性的原则,任何看到这段代码的开发者都会感到困惑,属于纯粹的语法冷知识,没有实际工程价值。

内容的提问来源于stack exchange,提问作者Yash-patil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 23:45:24