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
相关产品推荐
相关产品推荐

