我知道这是一个基本主题。但是我遇到了一个非常奇怪的案例。 这是我的代码的两个版本: 版本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
谢谢!
答案 0 :(得分:3)
您的程序通过使用未初始化变量的值来导致undefined behaviour。正如该链接所解释的,这意味着任何事情都可能发生,并且输出毫无意义。您不应该浪费时间尝试理解输出。而是修复程序。
答案 1 :(得分:0)
首先,nullptr不等于0。如果从std :: cout中删除代码(ptr == nullptr)并将ptr初始化为nullptr并打印ptr,那么您将看不到任何内容。< / p>