没有取消引用符号的指针变量的值是多少



我到处寻找对以下代码的解释,但在任何地方都找不到。我知道输出是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(,也就是说,指针操作数(可能是数组到指针转换的结果,必须指向某个数组的一个元素或过了末尾的一个(被调整为指向同一数组的另一个元素,遵循指针算法的规则,然后被取消引用。

最新更新