- •Структуры и другие типы данных.
- •Установка структурного шаблона.
- •Определение структурных переменных.
- •Создание простой структуры. ( тут не знаю как лучше)
- •Инициализация структуры.
- •Доступ к элементам структуры.
- •Передача структур в функции.
- •Создание массива структур.
- •Описание массива структур.
- •Определение элементов массива структур.
- •Вложенные структуры.
- •Использование указателей на структуры.
- •Описание и инициализация указателя на структуру.
- •Доступ к элементу структуры при помощи указателя.
- •Передача информации о структурах функциям. Использование элементов структуры.
- •Передача массива структур в функцию.
- •Дополнительные манипуляции со структурами.
- •Передача членов структуры в функцию.
- •Передача информации о структурах функциям. Использование элементов структуры.
- •Передача информации о структурах функциям. Использование адреса структуры.
- •Передача информации о структурах функциям. Использование массива.
- •Имя массива можно использовать для передачи в функцию указателя на первую структуру в массиве.
- •Затем можно использовать арифметическую операцию над указателем, чтобы передвигать его на последующие структуры в массиве. Заметим, что вызов функции
- •Структуры внутри структур.
- •Структуры и битовые поля.
- •Структуры. Их дальнейшее использование.
- •Объединения.
- •Шаблон объединения.
- •Объединения: синтаксис и правила.
- •Создание простого объединения.
- •Вспомогательные средства.
- •Использование typedef.
- •Сложные формы данных.
- •Использование enum.
Создание простой структуры. ( тут не знаю как лучше)
В следующем примере используется структура, аналогичная описанной выше структуре stboat. Для того чтобы определить, понимаете ли вы, как в программе обрабатываются различные элементы структуры, проанализируйте следующий листинг программы:
/*Программа на С, иллюстрирующая создание структуры.
Программа запоминает информацию о вашем катере в некоторой структуре С */
#include <stdio.h>
#define iSTRING15 15
#define iSTRING20 20
#define iNULL_CHAR 1
struct stboat {
char sztype [iSTRING15 + iNULL_CHAR];
char szmodel[iSTRING15 + iNULL_CHAR];
char sztitle[iSTRING20 + iNULL_CHAR];
int iyear;
long int Imotor_hours;
float fsaleprice;
} stused_boat;
int main(void)
{
printf ("\nPlease enter the type of the boat: "); /* Введите, пожалуйста, тип катера: */
gets (stused_boat.sztype);
printf ("\nPlease enter the model of the boat: "); /* Введите, пожалуйста, модель катера: */
gets(stused_boat.szmodel);
printf("\nPlease enter the title number for the boat: "); /* Введите, пожалуйста, бортовой номер катера: */
gets(stused_boat.sztitle);
printf("\nPlease enter the model year for the boat: "); /* Введите, пожалуйста, год выпуска модели катера: */
scanf("%d",&stused_boat.iyear);
printf("\nPlease enter the current hours on "); /* Введите, пожалуйста, количество часов, отработанных двигателем катера: */
printf("the motor for the boat: ");
scanf("%d",&stused_boat.Imotor_hours);
printf("\nPlease enter the purchase price of the boat: "); /* Введите, покупную стоимость катера */
scanf("%f",&stused_boat.fsaleprice);
printf("\n\n\n");
printf("A %d %s %s with title number #%s\n", stused_boat.iyear, stused_boat.sztype,
stused_boat.szmodel,stused_boat.sztitle); /* Катер ... с бортовьм номером .*/
printf("currently has %d motor hours", stused_boat.Imotor_hours); /* в настоящий момент отработал ... часов */
printf(" and was purchased for $%8.2f\n",stused_boat.fsaleprice); /* и был куплен за ...*/
return (0);
}
Результат работы программы показывает, как информация обрабатывается в структуре:
А 1952 Chris Craft with title number #CC1011771018C
currently has 34187 motor hours and was purchased for $68132.98
Вы можете заметить, что переменная stused_boat имеет глобальную область действия в файле, поскольку она была объявлена вне всяких функций.
Доступ к элементам структуры. Инициализация структуры. Передача структур в функции.
Доступ к элементам структуры.
Любой элемент структуры может обрабатываться программой самостоятельно.
Для доступа к элементам структуры можно использовать:
. («точка»)
->
Синтаксис операции «точка»:
stname.mname
В этой записи stname является переменной, связанной со структурным типом, а mname — это имя любой переменной-члена структуры.
Например, в С можно записать информацию в элемент szmodel при помощи следующего оператора:
gets(stused_boat.szmodel);
В этом операторе stused_boat — имя структуры, a szmodel — переменная-член структуры. Аналогичным образом для печати элемента структуры можно использовать функцию printf():
printf("%1d",stused_boat.lmotor_hours);
Доступ к элементам структуры в C++ по сути такой же:
cin >> stused_boat.sztype;
Этот оператор выполняет считывание типа катера stused_boat в символьный массив; следующий оператор выводит на экран продажную стоимость stused_boat
cout << stused_boat.fsaleprice;
Элементы структуры обрабатываются так же, как и любые другие переменные С или C++; необходимо только всегда использовать операцию "точка".
Существуют различия в описании структур в языках С и С++. В C++, отсутствует необходимость повторять ключевое слово struct при объявлении переменной некоторого структурного типа.