Как вы, вероятно, узнали из других ответов, в C вы не можете объявить структуру и инициализировать ее члены одновременно . Это разные задачи и должны выполняться отдельно.
Есть несколько вариантов инициализации переменных-членов структуры. Я покажу пару способов ниже. Сейчас предположим, что следующая структура определена в начале файла:
struct stuff {
int stuff_a;
int stuff_b;
};
Затем в вашем main()
коде представьте, что вы хотите объявить новую переменную этого типа:
struct stuff custom_var;
Это момент, когда вы должны инициализировать структуру. Серьезно, я имею в виду, что вы действительно действительно должны! Даже если вы не хотите присваивать им конкретные значения, вы должны хотя бы инициализировать их нулем. Это обязательно, потому что ОС не гарантирует, что она даст вам чистое пространство памяти для запуска вашего приложения. Поэтому всегда инициализируйте ваши переменные некоторым значением (обычно 0), включая другие типы по умолчанию, такие как char, int, float, double и т.д ...
Один из способов инициализации нашей структуры в ноль - через memset()
:
memset(&custom_var, 0, sizeof(struct stuff));
Другой имеет доступ к каждому члену индивидуально:
custom_var.stuff_a = 0;
custom_var.stuff_b = 0;
Третий вариант, который может запутать начинающих, - это когда инициализация членов структуры выполняется в момент объявления:
struct stuff custom_var = { 1, 2 };
Код выше эквивалентен:
struct stuff custom_var;
custom_var.stuff_a = 1;
custom_var.stuff_b = 2;