为什么C中只声明int a[3] 2[a]就能通过编译

发布于 2024-11-02 14:39:00 字数 290 浏览 2 评论 0原文

为什么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 技术交流群。

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

发布评论

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

评论(3

攒眉千度 2024-11-09 14:39:00

因为 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) or 2[a].

踏月而来 2024-11-09 14:39:00

因为所有 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 written 2[a].

放肆 2024-11-09 14:39:00

表达式由一个或多个操作数组成。表达式的最简单形式由单个文字常量或对象组成。一般来说,结果是操作数的右值。

根据 C 标准:

6.5.2.1 数组下标

2 后缀表达式后跟
方括号 [] 中的表达式是
元素的下标名称
数组对象的。的定义
下标运算符 [] 是
E1[E2] 与 (*((E1)+(E2))) 相同。
由于转换规则
适用于二元 + 运算符,如果 E1
是一个数组对象(相当于
指向 an 的初始元素的指针
数组对象),E2 是一个整数,
E1[E2] 表示第 E2 个元素
E1(从零开始计数)。

因此,a[b] 相当于*(a+b)b[a]。其中 ab 可以是任何表达式。

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

2 A postfix expression followed by an
expression in square brackets [] is a
subscripted designation of an element
of an array object. The definition of
the subscript operator [] is that
E1[E2] is identical to (*((E1)+(E2))).
Because of the conversion rules that
apply to the binary + operator, if E1
is an array object (equivalently, a
pointer to the initial element of an
array object) and E2 is an integer,
E1[E2] designates the E2-th element of
E1 (counting from zero).

So, a[b] is equivalent to *(a+b) and b[a]. where a and b can be any expression.

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