Разъяснение по начальному значению некоторой переменной принадлежит классу хранения 'auto' в C - PullRequest
0 голосов
/ 21 февраля 2019

В C указано, что переменная, которая принадлежит 'auto-class', имеет начальное значение.Это начальное значение является мусорным значением, однако я не могу понять, почему оно является мусорным значением, и при этом я не думаю, что действительно понимаю истинную концепцию «Мусорное значение».

#include <stdio.h>

int main(void) {
int my_int;
printf("%d", my_int);
int t;
printf("%d",t);

return 0;
}

Этот кодприводит к ответу «00», что означает, что начальное значение my_int и t равно «0».Можно ли это изменить?

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Переменные с автоматическим сроком хранения не имеют определенного значения, пока они не будут инициализированы.Они могут (и обычно делают) получить то, что уже было в памяти по их адресу, но даже это не гарантируется.Любая попытка рассуждения о неопределенном поведении бесполезна.

Что касается получения нулевого значения при каждом запуске вашей программы, это также приводит к неопределенному поведению.Undefined не означает «гарантированно непредсказуемый и случайный характер при каждом запуске».

0 голосов
/ 21 февраля 2019

«Мусор» просто означает, что значением может быть любое возможное значение типа int.Твой случай ноль, но чисто случайно.Если вы запустили программу в другое время или на другом компьютере, с другими настройками компилятора и т. Д., Это может быть что-то другое.

Переменные автоматического хранения обычно создаются простым выделением места в стеке.То есть указатель стека просто настраивается в соответствии с размером необходимого хранилища, а содержимое памяти в этом месте не записывается, поэтому он содержит все, что ранее было в памяти, когда оно использовалось последним.Инициализация его к определенному значению потребовала бы, чтобы компилятор выдавал код, который записывался в память, и на это требуется время - C - это скорость.Если вы не скажете ему записать в память, это не будет беспокоить.

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