首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C数组算法和指针

C数组算法和指针
EN

Stack Overflow用户
提问于 2012-12-02 09:34:17
回答 3查看 352关注 0票数 5

可能重复: In C arrays why is this true? a[5] == 5[a]

我正在阅读一个关于C的教程,我看到了这样的语法:

代码语言:javascript
复制
int doses[] = {1, 3, 2, 1000};
doses[3] == *(doses + 3) == *(3 + doses) == 3[doses]

现在重点是获得int 1000,但最后一个没有任何意义。它不是晚了,我的大脑就失去了功能,它是C特有的东西,或者是一个错误。当涉及到指针时,我想要涵盖我的所有基本知识,所以仔细阅读它。这意味着要理解一切。任何答案都将不胜感激!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-02 09:37:03

来自Wikipedia

因为表达式ai在语义上等价于*(a+i),而后者又相当于*(i+a),所以表达式也可以编写为ia,尽管很少使用这种形式。

票数 7
EN

Stack Overflow用户

发布于 2012-12-02 09:39:54

是的,数组订阅在C中是可交换的,e1[e2]*((e1)+(e2))确实是一样的。但是它在生产代码中是无用的,这个符号的唯一目的就是制造模糊的源代码。

票数 2
EN

Stack Overflow用户

发布于 2012-12-02 09:38:53

代码语言:javascript
复制
ISO c99 : 6.5.2.1 Array subscripting

1

其中一个表达式的类型为“指向对象类型的指针”,另一个表达式为整数类型,结果为“类型”类型。

代码语言:javascript
复制
E1[E2] either E1 will be pointer to object type and E2 will be integer type.

或,

代码语言:javascript
复制
E1 is integer type and E2 is of pointer to that type

因为+是可交换的,所以是E1[E2] == E2[E1],因为它实际上被计算为(*(E1+E2))

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13668014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档