我是C++的新手,如果这很基础,请原谅。

我试图理解在以下代码中增加指针后打印的值

int main()
{
    int i = 5;
    int* pointeri = &i;
    cout << pointeri << "\n";
    pointeri++;
    i =7;
    cout << *pointeri << "\n";
}

当我尊重指针时,它会打印一个随机的Integer。我试图理解,这里到底发生了什么,为什么指针不指向NULL,并且随机整数没有意义?

最佳答案

C++语言的概念是Undefined Behavior。这意味着可以编写不构成有效程序的代码,并且编译器不会停止甚至警告您。这种代码在执行时的作用是未知的。

您的程序就是一个典型的例子。在int* pointeri = &i;行之后,指针指向值i。在pointeri++之后,它指向值i之后的内存位置。在该位置存储的内容未知,并且此类代码的行为未定义。

不用说,在C++中进行编码时应格外小心,以保持在定义的行为范围内,以便在运行程序时获得有意义且可预测的结果。

10-04 14:23