指针增量答案不明白

时间:2016-09-26 15:12:20

标签: c++ pointers

我一直在尝试这样的代码

#include <iostream>
using namespace std;

int main() 
{
    int t=1;
    cout<<t<<" ";
    int *b = new int(t);
    cout<<*b++<<" ";
    cout <<*b<<" ";
    cout<<t<<" ";
    return 0;
}

它输出为1 1 0 1.我不能理解输出中的0。请解释一下为什么会这样?

2 个答案:

答案 0 :(得分:5)

在这种情况下,++运算符的优先级高于*运算符的优先级。因此,您正在递增指针b本身而不是指向的内存(这可能是您的意图)。

获得您想要的行为:

cout<<(*b)++<<" ";

答案 1 :(得分:4)

行后

cout << *b++ << " ";

b指向超出分配范围的记忆。

之后的那一行,

cout << *b << " ";

取消引用超出有效限制的内存。因此,它导致未定义的行为。