*(3+doses)怎么就等于3[doses]了

啊昌老师 2016-01-18 11:17:59
我对于doses[3]的理解:在doses指向的地址上偏移3个内存单元。
但是对3[doses]就完全不知道怎么去理解。

嗨翻C语言里的解释:
引用
doses[3] == *(doses + 3) == *(3 + doses) == 3[doses]


不明白的地方:*(3+doses)怎么就等于3[doses]了。c语言内部函数是怎么使用这几个符号的。

 #include<stdio.h>
int main(){
int doses[] = {1, 3, 2, 1000};
printf("doses[3]: %d\n", doses[3]);
printf("3[doses]: %d\n", 3[doses]);
return 0;
}
...全文
260 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 2016-01-18
  • 打赏
  • 举报
回复
doses[3] 被编译器理解成 *(doses + 3) 3[doses] 被编译器理解成 *(3 + doses) 所以是一样的 http://blog.csdn.net/paschen/article/details/47315449
啊昌老师 2016-01-18
  • 打赏
  • 举报
回复
引用 3 楼 paschen 的回复:
doses[3] 被编译器理解成 *(doses + 3) 3[doses] 被编译器理解成 *(3 + doses) 所以是一样的 http://blog.csdn.net/paschen/article/details/47315449
我刚好结帖了,没有给到分,抱歉。
ghx287524027 2016-01-18
  • 打赏
  • 举报
回复 2
C语言中,数组和下标可以互换,这是由数组下标的指针定义决定的,由于存在加法交换律,只要一个是指针,另一个是整型就行,而无关顺序,doses[3]等价于3[doses],等价于*(doses+3),等价于*(3+doses)。只要知道有这么回事就行,不推荐3[doses]这种写法。
苏叔叔 2016-01-18
  • 打赏
  • 举报
回复 2

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧