- •Создание простой структуры.
- •Инициализация структуры.
- •Передача структур в функции.
- •Описание массива структур.
- •Определение элементов массива структур.
- •Вложенные структуры. Иногда бывает удобно, когда одна структура содержит другую.
- •Описание и инициализация указателя на структуру.
- •Доступ к элементу структуры при помощи указателя.
- •Передача информации о структурах функциям. Использование элементов структуры.
- •Передача информации о структурах функциям. Использование элементов структуры.
- •Передача информации о структурах функциям. Использование адреса структуры.
- •Передача информации о структурах функциям. Использование массива.
- •Имя массива можно использовать для передачи в функцию указателя на первую структуру в массиве.
- •Затем можно использовать арифметическую операцию над указателем, чтобы передвигать его на последующие структуры в массиве.
- •Структуры и битовые поля.
- •Структуры. Их дальнейшее использование.
- •Объединения.
- •Объединения: синтаксис и правила.
- •Создание простого объединения.
- •Вспомогательные средства.
- •Использование typedef.
- •Сложные формы данных.
- •Использование enum.
Описание и инициализация указателя на структуру.
Вот самое простое описание, какое только может быть:
structguy *him;
Первым стоит ключевое слово struct, затем слово guy, являющееся именем структурного шаблона, далее * и за нею имя указателя. Синтаксис тот же, как для описаний других указателей, которые мы видели.
при инициализации адреса используют операцию получения адреса:
him = &fellow[0];
Доступ к элементу структуры при помощи указателя.
Первый способ, наиболее общий, использует новую операцию - >.
him - >income — этоfellow[0].income, еслиhim = &fellow[0]
Другими словами, структурный указатель, за которым следует операция - >, работает так же, как имя структуры с последующей операцией ".".
him — указатель, а him - >income — элемент структуры, на которую делается ссылка. Второй способ определения значения элемента структуры вытекает из последовательности:
если him == &fellow[0], то *him == fellow[0].
Это так, поскольку & и * — взаимообратные операции.
Круглые скобки необходимы, поскольку операция "." имеет приоритет выше, чем *.
Передача информации о структурах функциям. Использование элементов структуры.
аргументы функции передают значения в функцию. Структура гораздо сложнее, чем отдельная переменная, поэтому неудивительно, что саму структуру нельзя использовать в качестве аргумента функции. (Это ограничение снято в некоторых новых реализациях.)
Однако есть способы ввести информацию о структуре внутрь функции.
Передача информации о структурах функциям. Использование элементов структуры.
Поскольку элемент структуры является переменной с единственным значением (т. е. типа int или одного из его «родственников» — char, float, double или указатель), он может быть передан как аргумент функции. Простая программа финансовых расчетов, которая прибавляет взнос клиента к его счету, иллюстрирует этот способ. Заметим, между прочим, что мы объединили определение шаблона, описание переменной и инициализацию в один оператор.
/* передача элементов структуры как аргументов функции */
(пример нужен наверное)
#include<stdio.h>
struct funds {
char *bank;
floatbankfund;
char *save;
floatsavefund; } stan = {
"Senior tomatoes Bank",
1023.43,
"Savings and lendings of Snoopy",
4239.87
};
float sum(float x, float y);
void main()
{
float total;
extern struct funds stan; /* необязательное описание */
total=sum(stan.bankfund, stan.savefund);
printf ("Stan has only %.2f dollars.\n", total);
}
/* складывает два числа типа float */
float sum(float x, float y)
{
returnx+y;
}
Конечно, если вы хотите, чтобы программа воздействовала на значение элемента в вызывающей программе, можно передать ей адрес этого элемента:
modify(&stan.bankfund);
Передача информации о структурах функциям. Использование адреса структуры.
аргументы функции передают значения в функцию. Структура гораздо сложнее, чем отдельная переменная, поэтому неудивительно, что саму структуру нельзя использовать в качестве аргумента функции. (Это ограничение снято в некоторых новых реализациях.)