[英]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.