Я получаю вывод как -28762. Почему это не 0 (ноль), который должен быть целым числом по умолчанию?
#include<stdio.h>
#include<conio.h>
void main(){
int a;
clrscr();
printf("%d",a);
getch();
}
Я получаю вывод как -28762. Почему это не 0 (ноль), который должен быть целым числом по умолчанию?
#include<stdio.h>
#include<conio.h>
void main(){
int a;
clrscr();
printf("%d",a);
getch();
}
Хотя вы не инициализировали переменную, переменная ссылается на место в памяти.
Значение этого местоположения при преобразовании в целое число даст что-то, и в вашем случае это -28762.
Обратите внимание, что это происходит, когда вы объявляете любые простые типы данных, такие как int, float и т. д.
Для сложных типов, таких как определяемые пользователем типы и структуры, этого не произойдет.
Целочисленные переменные по умолчанию не равны нулю, если только они не являются областью действия файла или статическими. См. справочную ссылку https://msdn.microsoft.com/en-us/library/y2xtdbay.aspx
Если бы объявление z было для неинициализированной статической переменной или находилось в области файла, оно получило бы начальное значение 0, и это значение было бы неизменяемым.
static
неинициализированной переменной. Как только вы вызываете UB, результатом может быть что угодно.
- person Spikatrix; 17.06.2017
a
некоторым значением. - person Paul R   schedule 17.06.2017gcc -Wall -Wextra -g
, который бы вас предупредил). Обратите внимание, что ваша программа неверна (посколькуmain
не следует не объявлять как функциюvoid
). - person Basile Starynkevitch   schedule 17.06.2017