Инициализация структур
Часть раздела Logic & Flow путешествия по C на Coddy — урок 42 из 63.
Хотя вы можете создавать переменные структур, а затем присваивать значения их членам по отдельности, язык C предоставляет более удобный способ установки начальных значений. Вы можете инициализировать переменную структуры во время объявления, используя список инициализации, заключенный в фигурные скобки.
Синтаксис инициализации структуры:
struct StructureName variableName = {value1, value2, ...};Используя наш пример структуры Point, вы можете объявить и инициализировать её одной строкой:
struct Point p1 = {10, 20};Это создает переменную Point с именем p1, где x установлено в 10, а y — в 20. Значения в списке инициализации присваиваются членам структуры в том порядке, в котором они были объявлены в определении структуры.
Этот подход к инициализации не только более лаконичен, чем отдельные присваивания, но и гарантирует, что ваша struct будет содержать осмысленные значения, а не случайные «мусорные» данные. Это особенно полезно, когда начальные значения известны на этапе компиляции и вы хотите эффективно создавать готовые к использованию переменные struct.
Задание
ЛегкоСоздайте программу на языке C, которая демонстрирует инициализацию структур с использованием списков инициализации. Ваша программа должна:
- Определить
structс именемEmployeeсо следующими членами:- Целое число
idдля хранения идентификатора сотрудника - Символьный массив
departmentразмером 15 для хранения названия отдела - Целое число
yearsOfServiceдля хранения стажа работы (в годах) - Число с плавающей точкой
salaryдля хранения зарплаты сотрудника
- Целое число
- Создать три переменные типа
Employee, используя списки инициализации со следующими данными:emp1: ID 101, отдел "Engineering", 5 лет стажа, зарплата 75000.50emp2: ID 102, отдел "Marketing", 3 года стажа, зарплата 65000.25emp3: ID 103, отдел "Sales", 8 лет стажа, зарплата 80000.75
- Вывести информацию о каждом сотруднике в следующем точном формате:
Employee 1:ID: [id]Department: [department]Years of Service: [yearsOfService]Salary: [salary]Employee 2:ID: [id]Department: [department]Years of Service: [yearsOfService]Salary: [salary]Employee 3:ID: [id]Department: [department]Years of Service: [yearsOfService]Salary: [salary]
- Рассчитать и вывести общую зарплату всех трех сотрудников в формате:
Total Salary: [total] - Рассчитать и вывести средний стаж работы в формате:
Average Years of Service: [average]
Эта задача проверяет ваше понимание инициализации структур с использованием списков инициализации, где вы объявляете и инициализируете переменные структуры в одной строке. Значения в списке инициализации должны быть указаны в том же порядке, в котором члены были объявлены в определении структуры.
Ваш ожидаемый вывод должен быть следующим:
Employee 1:
ID: 101
Department: Engineering
Years of Service: 5
Salary: 75000.50
Employee 2:
ID: 102
Department: Marketing
Years of Service: 3
Salary: 65000.25
Employee 3:
ID: 103
Department: Sales
Years of Service: 8
Salary: 80000.75
Total Salary: 220001.50
Average Years of Service: 5.33Шпаргалка
Вы можете инициализировать переменную структуры во время объявления, используя список инициализации, заключенный в фигурные скобки:
struct StructureName variableName = {value1, value2, ...};Пример со структурой Point:
struct Point p1 = {10, 20};Значения в списке инициализации присваиваются членам структуры в том порядке, в котором они были объявлены в определении структуры. Этот подход более лаконичен, чем отдельные присваивания, и гарантирует, что ваша структура начнется со значимых значений, а не со случайных «мусорных» данных.
Попробуйте сами
#include <stdio.h>
// TODO: Определите структуру Employee здесь
int main() {
// TODO: Создайте три переменные типа Employee, используя списки инициализации
// TODO: Выведите информацию о каждом сотруднике
// TODO: Рассчитайте и выведите общую зарплату и средний стаж работы
return 0;
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Logic & Flow
1Основы указателей
Что такое указатель?Объявление указателейОператор взятия адреса (&)Оператор разыменования (*)Указатели NULLИтоги: Основы указателей4Проект: Простая текстовая утилита
Обзор проектаПодсчет символов7Структуры (structs)
Что такое структура?Объявление структурыСоздание переменных структурДоступ к членам структурыИнициализация структурПовторение: структура данных Student2Указатели и массивы
Имена массивов как указателиЭлементы массива — указателиАрифметика указателейСравнение указателейИтоги: Обход массива через указатели5Указатели и функции
Передача по значениюПередача указателей в функцииИзменение переменных через указателиКлассический пример: SwapПередача массивов в функцииИтоги: указатели как аргументы функций8Структуры и указатели
Указатели на структурыОператор «стрелка» (->)Передача структур по значениюПередача указателей на структурыДинамическое выделение памяти для структурИтоги: Изменение структур через указатели11Итоговые задачи на повторение
Повторение: динамическая конкатенация строкПовторение: массив структурПовторение: счетчик частоты слов3Символьные массивы и строки
Строки как массивы charНуль-терминаторВвод строк с помощью scanfИспользование strlen()Использование strcpy()Использование strcat()Использование strcmp()Итоги: основные строковые функции