我对C++相当陌生,所以如果这很基本,请原谅。
我试图理解在下面这段代码中,我递增指针后打印的值
int main()
{
int i = 5;
int* pointeri = &i;
cout << pointeri << "\n";
pointeri++;
i =7;
cout << *pointeri << "\n";
}
当我推断指针时,它打印出一个随机的整数,我想明白,这里到底发生了什么,为什么指针不指向NULL,随机整数有意义吗?我试图理解,这里到底发生了什么,为什么指针不指向NULL,随机整数有意义吗?
C++语言有一个概念,即 未定义的行为. 这意味着可以写出不构成有效程序的代码,编译器不会停止甚至警告你。这样的代码在执行时做什么是未知的。
你的程序就是一个典型的例子。在这一行之后 int* pointeri = &i;
指针指向的值是 i
. 在 pointeri++
它指向的是值之后的内存位置。i
. 在该位置存储的是什么是未知的,这种代码的行为是未定义的。
毋庸置疑,在使用C++进行编码时,应该非常小心,以保持在C++的范畴内。行为准则为了在运行程序时得到有意义和可预测的结果。
为什么指针不是指向NULL?
因为你没有将指针分配或初始化为null。
而且随机整数有意义吗?
没有。
为什么会有一个值被打印出来...
因为程序的行为是未定义的。
如你所知,"指针 "只是一个整数变量,其值被理解为一个内存地址。 如果这个值是 零。 俗称 NULL
并理解为 "它不指向任何东西"。 否则,就会推定其值有效。
如果你 "增量 "一个指针,它的值是非零的,因此被推定为有效。 如果你取消引用它,要么得到 "不可预知的数据",要么得到内存寻址故障。