这是一些丑陋的代码 - 但它完全合法(在C和C++中).
正如这个问题所解释的那样(这个流行的答案和我尝试提供一些历史背景.[]索引操作符是可交换的,所以
0[&a] = a+a;
Run Code Online (Sandbox Code Playgroud)
相当于:
(&a)[0] = a+a;
Run Code Online (Sandbox Code Playgroud)
&a是int对象的地址a.索引运算符采用指针操作数和整数操作数.通常,指针是数组名称(或者等效地,在此上下文中,指向数组的第一个元素的指针).但是,对于索引和指针算术,单个对象可以被视为具有单个元素的数组.
以前的声明是:
int a = 3;
Run Code Online (Sandbox Code Playgroud)
赋值将int对象a视为单个元素数组int,并引用该数组的元素0- 恰好是存在的唯一元素.
之前的值a是3,a+a显然是6.
所以这:
int a = 3;
0[&a] = a+a;
Run Code Online (Sandbox Code Playgroud)
相当于:
int a = 3;
a = a + a;
Run Code Online (Sandbox Code Playgroud)
这相当于:
int a = 3;
a = 6;
Run Code Online (Sandbox Code Playgroud)
这最终相当于:
int a = 6;
Run Code Online (Sandbox Code Playgroud)
在典型的专业软件工程环境中,它实际上相当于:
int a = 6; /* Please reject this submitted code and consider firing me. */
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |