Задать вопрос
@Evsign

Почему у неинициализированной переменной значение 0?

Читаю книгу по C++ Primer 5th edition (Stanley Lippman, Josée Lajoie, and Barbara E. Moo).
Там написано, что если переменная объявляется вне функции, то она автоматически инициализируется значением 0, а если переменная объявляется внутри функции, то она не будет инициализирована и будет содержать значение undefined. Это касательно build-in типов.

#include <iostream>
using namespace std;
int a;
int main(){
	int b;
	cout << a << " " << b << endl;
}

Почему тогда вот этот код выводит
0 0
?
  • Вопрос задан
  • 2665 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 2
@Lol4t0
Потому что так сложились звезды. Потенциально, вывод может быть любым, потому он и undefined. Ноль - входит в множество всевозможных вариантов
Ответ написан
evnuh
@evnuh
Поиск Гугл помог мне, впусти и ты его в свой дом
Под локальные переменные память выделяется на стеке. Стек никогда не обнуляется, а компилятор всего-лишь двигает стековый указатель. Так что предыдущая функция могла записать на стек всё что угодно, вернуться, вы в этой функции запросили выделить память на стеке под int и указатель снова подвинулся на 4(8) байт вниз, указывая на тот участок стека что оставила после себя предыдущая функция. Что она там оставила - никто не знает.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
Taraflex
@Taraflex
Ищу работу. Контакты в профиле.
В с++ нет undefined есть только NULL тот же 0 или nullptr.
Ответ написан
tsarevfs
@tsarevfs Куратор тега C++
C++ developer
Нет специального значения undefined. Это означает, что компилятор может делать с ней что хочет. В 2008 студии выводится 0 1, например.
Ответ написан
Комментировать
shatov
@shatov
1C
Потому что у них стоят значения по умолчанию. а по умолчанию - это ноль.
Ответ написан
Trrrrr
@Trrrrr
Скомпилируй программу в релизе.
В дебаге компилятор обнуляет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы