Если структура, инициализированная нулевыми значениями, занимает место - PullRequest
0 голосов
/ 26 августа 2018

Я не слишком знаком с C, но мне интересно, как структуры создаются в памяти.Возьмем, к примеру, эту структуру :

struct Books {
  char  title[50];
  char  author[50];
  char  subject[100];
  int   book_id;
};

int main() {
  struct Books Book1;
  struct Books Book2;
}

Мне интересно, если вы просто инициализируете его как struct Books Book1;, если он выделит память для всех полей, которые у него есть (titleauthor и т. Д.)Если нет, интересно, что он делает.Мне интересно, как язык программирования компилирует структуру, когда поля нулевые или не инициализированы.

Если он пуст / пуст / не выделяет память, то скажем, что вы установили его следующим образом:

strcpy(Book1.title, "C Programming");

А потом вы его отключили.Интересно, очищает ли она память, чтобы она возвращалась к нулю, или она выделяет память.

1 Ответ

0 голосов
/ 26 августа 2018

struct Books Book1; - это объявление переменной, а не инициализация. Все объявления переменных выделяют память для переменной, нет ничего особенного в объявлениях struct. Объем выделенной памяти составляет sizeof(struct Books).

Если переменная не инициализирована, она выделяет память, но начальное содержимое памяти зависит от реализации (если это не статическая переменная, тогда каждое поле инициализируется как 0).

Глобальные переменные выделяются при запуске программы; поскольку они также являются статическими, они получат нулевую инициализацию по умолчанию, если инициализатор не предусмотрен.

Локальные переменные распределяются при вводе функции или блока, а выделение памяти остается до выхода из функции или блока.

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