Освоение структур в C: определение, переменные, доступ и продвинутые примеры
Освоение структур в C
Научитесь определять, создавать и использовать структуры в C с понятными примерами и лучшими практиками.
Что такое структура в C?
struct (сокращение от structure) — это составной тип данных, группирующий переменные разных типов под единым именем. Это основа для создания сложных структур данных в C.
Определение структуры
Прежде чем создавать переменные структурного типа, нужно определить сам тип. Ключевое слово struct вводит определение:
struct structureName {
dataType member1;
dataType member2;
…
};
Пример:
struct Person {
char name[50];
int citNo;
float salary;
};
Это создает новый тип с именем struct Person. Теперь можно объявлять переменные этого типа.
Создание переменных структуры
Определение типа структуры не выделяет память. Для работы с ним объявите переменные:
struct Person {
// члены
};
int main() {
struct Person person1, person2, p[20];
return 0;
}
Альтернативно можно объединить определение и объявление переменных:
struct Person {
// члены
} person1, person2, p[20];
person1иperson2— отдельные переменныеstruct Person.p— массив из 20 экземпляровstruct Person.
Доступ к членам структуры
Для доступа к членам используются два оператора:
.— оператор прямого доступа к члену.->— оператор доступа через указатель на структуру (рассматривается в отдельном уроке).
Для чтения или изменения salary у person2:
person2.salary
Пример 1: Использование структуры в C
#include <stdio.h>
#include <string.h>
struct Person {
char name[50];
int citNo;
float salary;
} person1;
int main() {
strcpy(person1.name, "George Orwell");
person1.citNo = 1984;
person1.salary = 2500;
printf("Name: %s\n", person1.name);
printf("Citizenship No.: %d\n", person1.citNo);
printf("Salary: %.2f", person1.salary);
return 0;
}
Вывод
Name: George Orwell Citizenship No.: 1984 Salary: 2500.00
Обратите внимание: strcpy() копирует строку в массив char фиксированного размера, так как оператор присваивания нельзя использовать напрямую с массивами.
Использование typedef со структурами
Ключевое слово typedef создает псевдоним для типа, упрощая объявления:
typedef struct Distance {
int feet;
float inch;
} distances;
int main() {
distances d1, d2;
}
Без typedef пришлось бы писать:
struct Distance d1, d2;
Пример 2: Псевдоним на практике
#include <stdio.h>
#include <string.h>
typedef struct Person {
char name[50];
int citNo;
float salary;
} person;
int main() {
person p1;
strcpy(p1.name, "George Orwell");
p1.citNo = 1984;
p1.salary = 2500;
printf("Name: %s\n", p1.name);
printf("Citizenship No.: %d\n", p1.citNo);
printf("Salary: %.2f", p1.salary);
return 0;
}
Вывод
Name: George Orwell Citizenship No.: 1984 Salary: 2500.00
Вложенные структуры
Структуры могут содержать другие структуры, позволяя моделировать иерархические данные:
struct complex {
int imag;
float real;
};
struct number {
struct complex comp;
int integers;
} num1, num2;
Чтобы установить imag у num2 в 11:
num2.comp.imag = 11;
Пример 3: Вложенные структуры в действии
#include <stdio.h>
struct complex {
int imag;
float real;
};
struct number {
struct complex comp;
int integer;
} num1;
int main() {
num1.comp.imag = 11;
num1.comp.real = 5.25;
num1.integer = 6;
printf("Imaginary Part: %d\n", num1.comp.imag);
printf("Real Part: %.2f\n", num1.comp.real);
printf("Integer: %d", num1.integer);
return 0;
}
Вывод
Imaginary Part: 11 Real Part: 5.25 Integer: 6
Зачем использовать структуры в C?
Предположим, нужно хранить имя человека, номер гражданства и зарплату. Без структур пришлось бы создавать отдельные переменные для каждого поля для каждого человека, что быстро приводит к дублированию кода и путанице. Структуры инкапсулируют связанные данные в единую логическую единицу, способствуя чистому коду и упрощению сопровождения.
Что дальше?
- Структуры и указатели
- Передача структур в функции
Язык C
- C# Hello World — создание вашего первого C# приложения
- Понимание ключевых слов и идентификаторов C#: правила, списки и лучшие практики
- Мастерство C# переменных и примитивных типов данных: полное руководство
- Операторы C# — исчерпывающее руководство по операторам в C#
- Освоение побитовых и сдвиговых операторов в C#: полное руководство
- Основы ввода-вывода в C#: Console.WriteLine, ReadLine и форматирование
- Выражения, операторы и блоки в C#: подробное руководство с примерами
- Освоение комментариев в C#: виды, лучшие практики и XML-документация
- Освоение оператора switch в C#: синтаксис, примеры и лучшие практики
- Тернарный оператор в C#: краткое руководство по условным выражениям