没有取消引用符号的指针变量的值是什么?

时间:2018-12-10 04:28:54

标签: c++ arrays pointers

我到处搜索了以下代码的说明,但找不到任何地方。我知道输出是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];

2 个答案:

答案 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起),即指针操作数(可能是数组的结果)到指针的转换,并且必须指向某个数组的元素或末尾的一个元素)按照指针算术规则进行调整,以指向同一数组的另一个元素,然后被取消引用。