首页 > 解决方案 > 奇怪的 C++ 变量初始化

问题描述

我知道这是一个基本的话题。但是我遇到了一个非常奇怪的案例。这是我的代码的两个版本: 版本 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

提前致谢!

标签: c++11initialization

解决方案


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


推荐阅读