为什么在C++中增量指针后会有一个值打印出来,而不是NULL0?

问题描述 投票:-1回答:2

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

我试图理解在下面这段代码中,我递增指针后打印的值

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

当我推断指针时,它打印出一个随机的整数,我想明白,这里到底发生了什么,为什么指针不指向NULL,随机整数有意义吗?我试图理解,这里到底发生了什么,为什么指针不指向NULL,随机整数有意义吗?

c++ pointers
2个回答
3
投票

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

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

毋庸置疑,在使用C++进行编码时,应该非常小心,以保持在C++的范畴内。行为准则为了在运行程序时得到有意义和可预测的结果。


2
投票

为什么指针不是指向NULL?

因为你没有将指针分配或初始化为null。

而且随机整数有意义吗?

没有。

为什么会有一个值被打印出来...

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


0
投票

如你所知,"指针 "只是一个整数变量,其值被理解为一个内存地址。 如果这个值是 零。 俗称 NULL 并理解为 "它不指向任何东西"。 否则,就会推定其值有效。

如果你 "增量 "一个指针,它的值是非零的,因此被推定为有效。 如果你取消引用它,要么得到 "不可预知的数据",要么得到内存寻址故障。

© www.soinside.com 2019 - 2024. All rights reserved.