【发布时间】:2013-05-26 19:12:48
【问题描述】:
给定以下代码:
void Allocate(int *p)
{
p = new int;
*p++ = 2;
}
int main()
{
int i = 10;
Allocate(&i);
std::cout << i << std::endl;
}
我有点迷信:
*p++ = 2;
输出是10,我对为什么会出现这种情况的推理是*p++ 是一个临时的,因此在Allocate(int *p) 范围的末尾对它的任何分配都会丢失。
是这样吗? 感谢您的建议!
【问题讨论】:
-
你在做这样的事情时应该小心。通过增加该指针,您处于未定义行为的边缘。除了将其向前移动一个位置之外的任何操作都将是未定义的行为,因为它超出了数组之外或超出了末尾,请记住,出于指针运算的目的,单个变量被视为单个元素数组。