c++ - 在C++中增加指针后,为什么打印出一个值而不显示NULL/0?

标签 c++ pointers

我是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++中进行编码时应格外小心,以保持在定义的行为范围内,以便在运行程序时获得有意义且可预测的结果。

关于c++ - 在C++中增加指针后,为什么打印出一个值而不显示NULL/0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62024080/

相关文章:

c++ - 必须重新定义一些 kext 成员函数,以避免未解析的符号

c - 递归反转一个长度为2^n的整数数组,不修改原数组返回一个新数组

c - "void foo(int q[][4]){}"中的 q 是什么类型?使用 "void foo(int q[6][4]){}"与前者有何不同?

c++ - 将数据从 const void *data 转换为 double

不相关指针的相等比较可以评估为真吗?

c++ - 将缓冲区 boost 为 char*(无 std::string)

c++ - 遍历所有值

c++ - 在 C++ 中与循环中的变化值进行比较是一种很好的形式吗?

c++ - 传递一个空的 vector 参数

c++ - 从存储在 vector 中的指针获取对象属性