-2 [array]是什么意思

时间:2019-10-04 09:43:58

标签: c++ arrays

我最近偶然发现了以下代码

int array[] = {10, 20, 30};
cout << -2[array];

我知道array是指向数组第一个元素的指针,但是[pointer]的含义是什么,然后我们在其前面写上-2,这对我来说很陌生

3 个答案:

答案 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]