我一直在尝试这样的代码
#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。请解释一下为什么会这样?
答案 0 :(得分:5)
在这种情况下,++
运算符的优先级高于*
运算符的优先级。因此,您正在递增指针b
本身而不是指向的内存(这可能是您的意图)。
获得您想要的行为:
cout<<(*b)++<<" ";
答案 1 :(得分:4)
行后
cout << *b++ << " ";
b
指向超出分配范围的记忆。
之后的那一行,
cout << *b << " ";
取消引用超出有效限制的内存。因此,它导致未定义的行为。