鱼C论坛

 找回密码
 立即注册
查看: 2150|回复: 6

[已解决]考验鱼油们的机会来了

[复制链接]
发表于 2017-10-26 19:17:19 | 显示全部楼层 |阅读模式
5鱼币
本帖最后由 fishshuke 于 2017-10-27 11:20 编辑

最近遇到一种非主流数组的表达方式,之前遇到一回所以我认得。但是,问了不少学习C语言的朋友们。大家普遍表示还有这种操作?!
特来咱们论坛请高手帮忙解答,这是为什么?
#include"stdio.h"
int main()
{
     int a[6]={0,1,2,3,4,5}
     printf("%d", a[5]);
     printf("%d", 5[a]);
     
     return 0;
}
结果显而易见是a[5]=5[a]
请鱼油们解释这是为什么?
最佳答案
2017-10-26 19:17:20
我觉得是这样的:
数组的表示在c语言中只是一种语法糖,其在编译中会被翻译为指针的形式
所以 a[5] == *(a + 5)
而    5[a] == *(5 + a)
两种形式都相当于对a指向的地址平移了5个单位(这里,每个单位为一个int)

最佳答案

查看完整内容

我觉得是这样的: 数组的表示在c语言中只是一种语法糖,其在编译中会被翻译为指针的形式 所以 a[5] == *(a + 5) 而 5[a] == *(5 + a) 两种形式都相当于对a指向的地址平移了5个单位(这里,每个单位为一个int)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-10-26 19:17:20 | 显示全部楼层    本楼为最佳答案   
我觉得是这样的:
数组的表示在c语言中只是一种语法糖,其在编译中会被翻译为指针的形式
所以 a[5] == *(a + 5)
而    5[a] == *(5 + a)
两种形式都相当于对a指向的地址平移了5个单位(这里,每个单位为一个int)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-10-26 19:17:52 | 显示全部楼层
自己的帖子,自己坐沙发。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-10-26 23:57:33 From FishC Mobile | 显示全部楼层
第一个printf a[5]没有索引越界?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-10-27 10:05:57 | 显示全部楼层
一般没有出现这种写法,不过C语言支持那就行了...
下面是上面代码的汇编...
a[4] 和 4[a] 汇编都是做相同的事情..
1509069740(1).png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-10-27 11:22:29 | 显示全部楼层
BngThea 发表于 2017-10-26 22:01
我觉得是这样的:
数组的表示在c语言中只是一种语法糖,其在编译中会被翻译为指针的形式
所以 a[5] == *( ...

太棒啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-10-27 11:22:45 | 显示全部楼层
本帖最后由 fishshuke 于 2017-10-27 11:25 编辑
橙C 发表于 2017-10-27 10:05
一般没有出现这种写法,不过C语言支持那就行了...
下面是上面代码的汇编...
a[4] 和 4[a] 汇编都是做相同 ...


你的答案是对的!但是论坛只能评选一个最佳答案。所以,我只能按照时间先后顺序了。我把最佳答案给了上面的一个朋友。希望你能够理解。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-28 19:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表