奇怪的C ++变量初始化

时间:2018-10-25 02:43:34

标签: c++11 initialization

我知道这是一个基本主题。但是我遇到了一个非常奇怪的案例。 这是我的代码的两个版本: 版本1:

int num;
char *ptr;
std::cout << (num == 0) << std::endl;
std::cout << (ptr == nullptr) << std::endl;

输出:
1
0
版本2:

int num;
char *ptr = nullptr;
std::cout << (num == 0) << std::endl;
std::cout << (ptr == nullptr) << std::endl;

输出:
0
1
整数num的初始值似乎取决于指针ptr的初始化。

有人可以解释一下吗?我读了其他文章,但还是不明白。我尝试编译并运行了很多次。该值似乎不是随机的。总是这个结果。

我正在使用g ++ init.cc -o out -std = c ++ 11

谢谢!

2 个答案:

答案 0 :(得分:3)

您的程序通过使用未初始化变量的值来导致undefined behaviour。正如该链接所解释的,这意味着任何事情都可能发生,并且输出毫无意义。您不应该浪费时间尝试理解输出。而是修复程序。

答案 1 :(得分:0)

首先,nullptr不等于0。如果从std :: cout中删除代码(ptr == nullptr)并将ptr初始化为nullptr并打印ptr,那么您将看不到任何内容。< / p>