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

Различия

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

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

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
c:c_ultimate_guide:structs [2025/10/25 14:27] radi0devc:c_ultimate_guide:structs [2025/11/09 12:07] (текущий) – внешнее изменение A User Not Logged in
Строка 29: Строка 29:
   char * name;   char * name;
 } tom; } 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>
  
Строка 68: Строка 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>