我最近偶然发现了以下代码
int array[] = {10, 20, 30};
cout << -2[array];
我知道array
是指向数组第一个元素的指针,但是[pointer]
的含义是什么,然后我们在其前面写上-2
,这对我来说很陌生
答案 0 :(得分:2)
就跟你写的一样
cout << -(2[array]);
与
相同cout << -(array[2]);
在C ++运算符[]
中,数组上的地址只是通过括号中指定的数字偏移数组的地址。与任何加法一样,您可以交换操作数,结果将保持不变。
例如,在这种情况下,-0[array]
会给您-10
。
答案 1 :(得分:1)
有两种方法可以通过指针偏移量访问数组元素。一种是普通的
int array[] = {10, 20, 30};
cout << -array[2]; // prints -30
,其中之一是您发布的异常。这两个版本是等效的。
请注意,由于一元减运算符与下标运算符相比具有lower precedence,因此-2[array]
不会包含负索引,而与-(2[array])
相同。
答案 2 :(得分:0)
在C和C ++中,可以在不更改含义的情况下交换数组名称和索引的位置,即-2[array]
和-array[2]
相同。两者都将编译并执行相同的操作。选中此SO post
但是,如果您使用C#或Java之类的语言进行尝试,则会出现编译器错误,提示Cannot apply indexing with [] to an expression of type 'int'
或类似内容。这是一个很好的示例,可以了解如果语言支持指针或不支持指针,代码将如何工作。
请注意,如评论中所指出的,否定运算符的优先级低于数组索引运算符,因此它将计算为-array[2]
而不是array[-2]