指针递增时的行为。 C++

Behavior in case of pointer increment. C++

考虑以下代码:

int main()
{
    int* p = new int(3);
    p+=4;
    std::cout<<*p<<std::endl;
}

我的编译器(Visual Studio 2012)打印:-7514522142 int this case.
那么我们能否以某种方式推断出输出以及这段代码是否合法?

您正在越界访问内存(分配给单个 int 对象)。行为是 undefined,即不可推导。尽管在语法上有效,但该程序不应被视为合法。

So can we somehow deduce the output and is this code legal?

指针以其指向的类型大小的倍数递增。当您将 4 添加到 p 时,您将添加 4 * sizeof(int),而不仅仅是 4 个字节。

如果您试图使 p 指向 "next" 整数,请将其递增 1,而不是 4。否则,p 将指向超出你分配了什么。

事实上,如果我没记错的话,您的分配只会创建一个值为 3 的 int,而不是三个单独的 int

int* p = new int(3);

尝试注释掉 p += 4; 行,您应该得到“3”作为输出。考虑到这一点,上面 juanchopanza 的回答是正确的。