C-在c语言中,为什么c[5] == 5[c]?

发布于 2017-02-03 14:44:34 字数 0 浏览 1194 评论 8

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

虐人心 2017-09-19 18:36:28

在 stackoverflow 上看看: In C arrays why is this true? a[5] == 5[a]

《C专家编程》中有详细的解释。

c[5] 也就是

*(c+5)

由于加法满足交换律,于是

*(c+5) == *(5+c)

于是有

c[5] == 5[c]

灵芸 2017-09-18 14:04:23

c[5]会被计算成:

*(c+5)

而5[a]会被计算成:

*(5+c)

在c语言中,数组可以被看成指针。

偏爱自由 2017-09-12 12:59:51

若windows下开发C,使用Disassembly功能,看下汇编代码就明白了。

偏爱自由 2017-06-24 17:04:48

其实[]算是个运算符。在汇编中有种寻址方式可以使ds[ex],ex[ds]。他的意思其实就是简单的段地址*16+偏移地址。那么在C里也差不多a[5]表示的地址是a+5当然,5[a]也是表示a+5.所以两者是一样的。

晚风撩人 2017-06-23 03:53:47

 C[5];//底层处理为 *(C+5)
5[C];//底层处理为 *(5+C)
/*
任何 A[B]
处理为 *(A+B)
A,B可以是任何有效值;
最终计算出数据所在的地址,*这个运算符就由地址得到数据.
地址相等,则目标相同,即数据相等
*/

夜无邪 2017-05-17 15:08:02

c[5] == 5[c] 这种代码如果是汇编的话,就容易理解

浮生未歇 2017-02-22 04:46:24

不好意思,用ipad 回答的。不知道怎么没答上去。

c[5]是数组,这毫无疑问。如果要进行相等比较。那就是说5[c]也是数组。
对,在C语言中字母是直接当数字来处理。但我敢很肯定的说c的ascii码绝不是5。

在C中,数组名是可以当成指针来处理。但数组名不是指针。就算是,指针也不能做相等比较吧。

灵芸 2017-02-17 15:50:48

一段很有趣的代码。

 #include <stdio.h>
int main(int argc, char** argv)
{
int a=3, b = 5;

printf(&a["Ya!Hello! how is this? %sn"], &b["junk/super"]);

printf(&a["WHAT%c%c%c %c%c %c !n"], 1["this"],
2["beauty"],0["tool"],0["is"],3["sensitive"],4["CCCCCC"]);

return 0;
}

它的输出是:

 Hello! how is this? super
That is C !

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文