Структуры в Си

Введение

Структура - это объект в котором может быть несколько других объектов причём разных типов.

Рассмотрим такой объект как веб сайт.

Назовём структуру Website

Website
У сайта может быть адрес или имя Website name
Год создания Website year
Администратор Website admin
Рейтинг или индекс качества Website rating
И огромное количество других объектов

Сайтов могут быть тысячи и всю эту информацию нужно как-то хранить.

Можно создать массив, но какого типа? url скорее всего char, year int, admin char, rating double

Делать несколько массивов очень накладно.

Чтобы решить эту задачу подойдут структуры. Достаточно объявить тип структуры, напримр Website, перечислить какие объекты мы хотим хранить и какие у них типы. Затем можно создавать новые объекты типа structure объявлять, что они типа Website и обращаться к их вложенным объектам.

Создадим структуру Website и несколько объектов типа Website, проще говоря - сайтов.

Website - это называние структуры, что-то вроде типа. Аналог это int, char, float. Только этот тип Вы создаёте сами.

У каждого будет имя, год и рейтинг.

После того как они созданы, обращаться к объектам можно дописав их имя к названию структуры черзе точку.

Например: Название_объекта.name

#include <stdio.h> #include <string.h> struct Website { char name[80]; int year; float rating; } // пока что никаких объектов не создано - мы просто определили структуру с именем Website. // эта структура содержит три члена (поля) разного типа. site0, site1 = {"AndreyOlegovich.ru", 2010, 310.1} // 1. Только теперь, когда мы объявили две переменные site0 и site1 типа Website // у нас появились объекты данной структуры // члены site1 инициализированы а вот // site0 пока что "пуст" ; int main() { printf("site1 -- Name: %s year: %d rating: %.1f\n", site1.name, site1.year, site1.rating); // 2. Cтандартный способ присвоить значения объектам структуры struct Website site2 = {"HeiHei.ru", 2018, 30.0}; printf("site2 -- Name: %s year: %d rating: %.1f\n", site2.name, site2.year, site2.rating); // 3. Присвоим значения объектам по отдельности struct Website site3; // С int и float всё просто site3.year = 2010; site3.rating = 310.1; // А вот с char нужно поработать дополнительно strcpy(site3.name, "TopBicycle.ru"); printf("site3 -- Name: %s year: %d rating: %.1f\n", site3.name, site3.year, site3.rating); // 4. Заполним структуру с клавиатуры с помощью функции scanf(); struct Website site4; printf("Enter the name, year and rating for site4\n"); scanf("%s %d %f", site4.name, &site4.year, &site4.rating); printf("site4 -- Name: %s year: %d rating: %.1f\n", site4.name, site4.year, site4.rating); // 5. Копируем структуру site0 = site4; printf("site0 -- Name: %s year: %d rating: %.1f\n", site0.name, site0.year, site0.rating); return 0; }

О функции scanf() Вы можете прочитать здесь

gcc -o struc struct.c

./struct

site1 -- Name: AndreyOlegovich.ru year: 2010 rating: 310.1 site2 -- Name: HeiHei.ru year: 2018 rating: 30.0 site3 -- Name: TopBicycle.ru year: 2010 rating: 310.1 Enter the name, year and rating for site4 aredel.com 2018 10 site4 -- Name: aredel.com year: 2018 rating: 10.0 site0 -- Name: aredel.com year: 2018 rating: 10.0

Следующий урок: Оператор «стрелка» указатель на член структуры Предыдущий урок: Указатели

Похожие статьи
Программирование на Си
Основы Си
Учебник по Си
Boolean в Си
Сокеты в Си
К и Р
Что такое argc, char * argv[]
Функция scanf()
Указатели
Запросы к REST API на Си
Оператор «стрелка» указатель на член структуры

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящую по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: