мета-данные страницы
  •  

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

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