Вторник, 19.03.2024, 06:12
Приветствую Вас, Гость |
Меню сайта
Наш опрос
Нужен ли форум на этом сайте?
Всего ответов: 1296
Статистика

Онлайн всего: 8
Гостей: 8
Пользователей: 0

Структуры в СИ


 Структура – это сложный тип данных представляющий собой упорядоченное в памяти множество элементов различного типа. Каждый элемент в структуре имеет свое имя и называется полем. В СИ элементы структуре располагаются последовательно, а размер структуры определяется суммой размеров всех элементов.
 Объявление в СИ структуры имеет вид:
  struct [имя типа]
  {
   поле_1;
   поле_2;
   ...
   поле_N;
  } [список переменных];

 Объявление полей структуры возможно только без инициализации. Если несколько полей следующих друг за другом в описании структуры имеют один и тот же тип, то для их описания можно использовать синтаксис объявления нескольких переменных одного и того же типа. Типом поля может быть любой тип (как системный, так и пользовательский), описанный ранее.
Примеры структур:
 Пример структуры в СИ, содержащая информацию о точке в двумерном пространстве (координаты):
  struct Point
  {
   double x, y;
  };

 А вот структура в СИ, содержащая информацию об окружности:
  struct Circle
  {
   double x, y, r;
  };

 Структура, содержащая информацию о студенте (фамилия, имя, отчество, номер зачетной книжки, средний балл):
  struct Student
  {
   char sname[20], name[20], patronymic[20];
   unsigned int num;
   double mark;
  };

Структура в СИ, содержащая информацию о группе студентов (название группы, количество студентов, список студентов (максимально 30)):
  struct Group
  {
   char name[10];
   unsigned number;
   struct Student list[30];
  };

 В языке СИ объявление переменной определенной структуры осуществляется после описания данной структуры вследующем виде:
  struct тип имя_1[= значение_1][,...];
  struct Point pnt[3] = {{0,0},{1,0},{0,1}};

  struct Circle c1 = {10.0,10.0,5.0},
  c2 = {0.0,0.0,25.0};

  struct Student st
   = {"Иванов","Иван","Иванович",959623,7.5};

  struct Group gr ={
   "97-BC”, 3, {
    {"Иванов”, ”Иван”, ”Иванович”, 979601,8.0},
    {"Петров”, ”Петр”, ”Петрович”, 979602,6.5},
    {"Сидоров”,”Сидор”,”Сидорович”,979603,9.0}
   }
  };

 От обязательно использования ключевого слова struct можно отказаться, если описывать структуру, используя оператор объявления типа typedef в следующем виде:
  typedef struct [первичное имя типа] {...} имя типа;
 Первичное имя типа, указываемое перед перечнем полей структуры является необязательным и указывается редко. Как правило, первичное имя типа имеет тот же идентификатор, что и основное имя типа, но начинается со знака подчеркивания. Структура, содержащая информацию о книге (ФИО автора, название книги, год издания):
  typedef struct {
   char author[20], title[50];
   unsigned year;
  } BOOK;

 Объявление переменной данного типа:
  BOOK book = {"Автор1”,”Книга1”, 1986};

 Обращение к полям структуры осуществляется в следующем виде:
  имя_переменной.имя_поля

 Для обращения к конкретному полю структуры сначала пишется имя переменной структуры, а после через точку название поля. С точки зрения языка СИ при таком обращении к полю можно как получить его значение так и присвоить ему новое.Примеры:
 Вычисление длины окружности, заданной переменной cir типа Circle:
  double length = 2.0*3.1415*cir.r;

 Ввод информации о студенте в переменную st типа Student:
  scanf("%s %s %s %u %lf", &st.sname, &st.name,
  &st.patronymic, &st.num, &st.mark);
 Вывод на экран списка группы, заданной в переменой gr типа Group:
  printf("Группа: %s\n",gr.name);
  for(unsigned i=0;i < n; ++i)
   printf("%2u: %20s %20s %20s %6u %.1lf\n", i+1, gr.list[i].sname, gr.list[i].name, gr.list[i].patronymic, gr.list[i].num, gr.list[i].rate);

 Для определения размера переменной структурного типа в байтах используется оператор определения типа sizeof.
Например:
  unsigned size = sizeof(struct Student); //size == 57

Далее переходим к работе с файлами в СИ.
Форма входа
Поиск
Мы в сети
Реклама
Для того чтобы не видеть рекламу в правом верхнем углу сайта пройдите простую процедуру регистрации
ФОРУМ
У нас наконецто появился форум! Добро пожаловать! Будьте первыми, задайте направление форуму! =)
--- Не стесняемся - заходим на форум! ---