Значения по умолчанию в turbo c [дубликаты]

Я получаю вывод как -28762. Почему это не 0 (ноль), который должен быть целым числом по умолчанию?

#include<stdio.h>
#include<conio.h>

void main(){
   int a;
   clrscr();
   printf("%d",a);
   getch();
}

person Nitesh    schedule 17.06.2017    source источник
comment
Неопределенное поведение — это неопределенное поведение. Вам нужно инициализировать a некоторым значением.   -  person Paul R    schedule 17.06.2017
comment
Не используйте TurboC. Он реализует устаревший вариант C (или C++ с TurboC++). Используйте компиляторы, соответствующие последним стандартам (например, GCC или Clang...) и включить все предупреждения и отладочную информацию (например, компилировать с gcc -Wall -Wextra -g, который бы вас предупредил). Обратите внимание, что ваша программа неверна (поскольку main не следует не объявлять как функцию void).   -  person Basile Starynkevitch    schedule 17.06.2017


Ответы (1)


Хотя вы не инициализировали переменную, переменная ссылается на место в памяти.

Значение этого местоположения при преобразовании в целое число даст что-то, и в вашем случае это -28762.

Обратите внимание, что это происходит, когда вы объявляете любые простые типы данных, такие как int, float и т. д.

Для сложных типов, таких как определяемые пользователем типы и структуры, этого не произойдет.

Целочисленные переменные по умолчанию не равны нулю, если только они не являются областью действия файла или статическими. См. справочную ссылку https://msdn.microsoft.com/en-us/library/y2xtdbay.aspx

Если бы объявление z было для неинициализированной статической переменной или находилось в области файла, оно получило бы начальное значение 0, и это значение было бы неизменяемым.

person DhruvJoshi    schedule 17.06.2017
comment
Является ли -28762 .. место в памяти ..????? - person Nitesh; 17.06.2017
comment
Нет, но когда вы объявляете int, ему назначается 2-байтовая ячейка памяти. Там может быть что угодно, хранящееся в этом месте - person DhruvJoshi; 17.06.2017
comment
В каком случае... целочисленное значение по умолчанию, т. е. "0", присваивается "a"...???????? - person Nitesh; 17.06.2017
comment
@Nitesh: локальные (автоматические) переменные никогда не инициализируются значением по умолчанию. Однако статические/глобальные переменные инициализируются равными 0. - person Paul R; 17.06.2017
comment
Когда я использую указатель *p.. такой, что p=, когда я печатаю *p.. он печатает значение a и использует приращение ++p; он меняет свое местоположение на 2 .. сейчас .. когда я печатаю * p ... он дает вывод = 0 .. почему??? пожалуйста, дайте объяснение .. так как я новичок .. - person Nitesh; 17.06.2017
comment
@Nitesh Неопределенное поведение для печати значения локальной не-static неинициализированной переменной. Как только вы вызываете UB, результатом может быть что угодно. - person Spikatrix; 17.06.2017
comment
@alk Разве Turbo C не использует один и тот же компилятор Borland для программ C и C ++? Я согласен, что вопрос отмечен тегом C, хотя - person Spikatrix; 17.06.2017
comment
@CoolGuy Если я правильно помню, Turbo C 2.0 стал Turbo C++ 1.0 примерно в 1990 году. - person alk; 17.06.2017
comment
Несмотря на то, что вы не инициализировали переменную, переменная ссылается на исходное местоположение в памяти. Неправда. Может быть выделен регистр. Стандарт не говорит, что все локальные переменные должны иметь место в памяти. - person Ajay Brahmakshatriya; 19.06.2017