繁体   English   中英

为什么在 C++ 中增加一个指针后打印一个值而不是 NULL/0?

[英]Why is there a value printed and not NULL/0 after incrementing a pointer in C++?

我对 C++ 相当陌生,所以如果这是非常基本的,请原谅。

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

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

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

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

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

不用说,在 C++ 中编码时应该非常小心,以便保持在定义行为的 realm 中,以便在运行程序时获得有意义和可预测的结果。

为什么指针不是指向 NULL

因为您尚未分配或初始化指向 null 的指针。

随机 integer 是否有意义?

不。

为什么要打印一个值...

因为程序的行为是未定义的。

如您所知,“指针”只是一个 integer 变量,其值被理解为 memory 地址。 如果该值为零,按照惯例,我们将其NULL ,并将其理解为“它不指向任何东西”。 否则,该值被假定为有效。

如果你“增加”一个指针,它的值是非零的,因此被认为是有效的。 如果取消引用它,您将获得“不可预测的数据”或内存寻址错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM