мета-данные страницы
Различия
Показаны различия между двумя версиями страницы.
| Следующая версия | Предыдущая версия | ||
| c:c_ultimate_guide:structs [2025/10/25 14:24] – создано radi0dev | c:c_ultimate_guide:structs [2025/11/09 12:07] (текущий) – внешнее изменение A User Not Logged in | ||
|---|---|---|---|
| Строка 20: | Строка 20: | ||
| // определение переменной, | // определение переменной, | ||
| struct person tom; | struct person tom; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | определение структуры и ее переменной сразу | ||
| + | <code c> | ||
| + | struct person{ | ||
| + | int age; | ||
| + | char * name; | ||
| + | } tom; | ||
| + | </ | ||
| + | при таком обявлении переменной __можно не указывать имя__ структуры. | ||
| + | |||
| + | определение структуры через typedef (тн псевдоним структуры): | ||
| + | <code c> | ||
| + | #include < | ||
| + | |||
| + | typedef struct { | ||
| + | int age; | ||
| + | char* name; | ||
| + | } person; | ||
| + | |||
| + | int main(void) { | ||
| + | person tom = {23, " | ||
| + | printf(" | ||
| + | return 0; | ||
| } | } | ||
| </ | </ | ||
| Строка 36: | Строка 61: | ||
| </ | </ | ||
| В этом случае перед именем элемента указывается точка, например, | В этом случае перед именем элемента указывается точка, например, | ||
| + | |||
| + | иницииализация переменной при объявлении структуры: | ||
| + | <code c> | ||
| + | struct person { | ||
| + | int age; | ||
| + | char * name; | ||
| + | } tom = {38, " | ||
| + | </ | ||
| ==== Обращение к элементам структуры ==== | ==== Обращение к элементам структуры ==== | ||
| Строка 52: | Строка 85: | ||
| struct person tom = {23, " | struct person tom = {23, " | ||
| printf(" | printf(" | ||
| + | return 0; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== Составные литералы ===== | ||
| + | |||
| + | Составные литералы (compound literals) позволяют сократить код и использовать литералы, | ||
| + | |||
| + | <code c> | ||
| + | #include < | ||
| + | |||
| + | typedef struct { | ||
| + | int x; | ||
| + | int y; | ||
| + | } Point; | ||
| + | |||
| + | void print_point(Point p) { | ||
| + | printf(" | ||
| + | } | ||
| + | |||
| + | Point create_point(int x, int y) { | ||
| + | return (Point) {x, y}; // возвращаем строковой литерал | ||
| + | } | ||
| + | int main() { | ||
| + | Point p = create_point(170, | ||
| + | print_point(p); | ||
| return 0; | return 0; | ||
| } | } | ||
| </ | </ | ||