我到处搜索了以下代码的说明,但找不到任何地方。我知道输出是5,但是有人可以向我解释为什么是5吗? * b计算完第二到第二行后,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];
答案 0 :(得分:1)
在分配给b
之后,它现在指向a
数组中的第三个元素(即值“ 1”)。
表达式b[3]
等效于*(b+3)
,这意味着得到b后面三个位置的值(这本质上是指针算术-b+3
是一个a b
之后3个位置的指针。在这种情况下,b
之后3个整数)。因此,由于b指向a[2]
,所以加3使其等于等于5的a[2+3]
或a[5]
(因为第一个循环生成a[i]==i
)。
答案 1 :(得分:0)
cppreference: operator_member_access - Built-in_subscript_operator
内置的下标表达式
E1[E2]
与表达式*(E1 + E2)
完全相同,除了求值顺序(自C ++ 17起),即指针操作数(可能是数组的结果)到指针的转换,并且必须指向某个数组的元素或末尾的一个元素)按照指针算术规则进行调整,以指向同一数组的另一个元素,然后被取消引用。