我到处寻找对以下代码的解释,但在任何地方都找不到。我知道输出是5,但有人能向我解释为什么是5吗*在倒数第二行求值后,b等于2(我知道为什么(,但我不知道b[3]为什么等于5。我只需要解释最后一行。
int* a = new int[10];
for(int i = 0; i < 10; i++)
a[i] = i;
int* b = &a[2];
cout << b[3];
在分配给b
之后,它现在指向a
数组中的第三个元素(即值"1"(。
表达式b[3]
等价于*(b+3)
,这意味着获得在b后三个位置的值(这本质上是指针算术-b+3
是在b
后三个地方的指针。在这种情况下,b
后三个整数(。因此,由于b指向a[2]
,加上3使其指向等于5的a[2+3]
或a[5]
(因为第一个循环生成a[i]==i
(。
cppreference:operator_member_access-Built-in_subscript_operator
内置的下标表达式
E1[E2]
与表达式*(E1 + E2)
完全相同,除了求值顺序(由于C++17(,也就是说,指针操作数(可能是数组到指针转换的结果,必须指向某个数组的一个元素或过了末尾的一个(被调整为指向同一数组的另一个元素,遵循指针算法的规则,然后被取消引用。