странная инициализация переменной C ++ - PullRequest
0 голосов
/ 25 октября 2018

Я знаю, что это основная тема.Но я сталкиваюсь с очень странным случаем.Вот две версии моего кода: Версия 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 голосов
/ 25 октября 2018

Прежде всего, nullptr не равен 0. Если вы удалите код (ptr == nullptr) из std :: cout и просто инициализируете ptr как nullptr и напечатаете ptr, вы увидите, что ничего не печатается.

0 голосов
/ 25 октября 2018

Ваша программа вызывает неопределенное поведение , используя значение неинициализированной переменной.Как объясняется по ссылке, это означает, что может случиться что угодно, а вывод не имеет смыслаВы не должны тратить время, пытаясь понять результат;вместо этого исправьте программу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...