为什么C中只声明int a[3] 2[a]就能通过编译
为什么C中只声明int a[3]就可以编译2[a],
1 #include <stdio.h>
2
3 int main(int argc, char **argv)
4 {
5 int a[3] = {1, 2, 3};
6 printf("a[2] is: %d\n", a[2]);
7 printf("2[a] is: %d\n", 2[a]);
8
9 return 0;
10 }
而且输出都是3,怎么解释?
Why 2[a] can be compiled if only declare int a[3] in C.
1 #include <stdio.h>
2
3 int main(int argc, char **argv)
4 {
5 int a[3] = {1, 2, 3};
6 printf("a[2] is: %d\n", a[2]);
7 printf("2[a] is: %d\n", 2[a]);
8
9 return 0;
10 }
And the output both 3, how to explain it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
因为
a[2]
只是*(a+2)
的语法糖,与*(2+a)
相同或2[a]
。Because
a[2]
is just syntactic sugar for*(a+2)
, which is the same as*(2+a)
or2[a]
.因为所有
a[2]
在 C 中的含义都是*(a + 2)
,因此*(2 + a)
也同样有效,也可以写成2[a]
。Because all
a[2]
means in C is*(a + 2)
, and so*(2 + a)
works just as well, which could also be written2[a]
.表达式由一个或多个操作数组成。表达式的最简单形式由单个文字常量或对象组成。一般来说,结果是操作数的右值。
根据 C 标准:
6.5.2.1 数组下标
因此,
a[b]
相当于*(a+b)
和b[a]
。其中a
和b
可以是任何表达式。An expression is composed of one or more operands. The simplest form of an expression consists of a single literal constant or object. The result, in general, is the operand's rvalue.
As per the C standard:
6.5.2.1 Array subscripting
So,
a[b]
is equivalent to*(a+b)
andb[a]
. wherea
andb
can be any expression.