Для объявления массива структур следует сначала определить структуру, а затем объявить массив переменных данного типа. Например, для объявления 100-элементного массива структур типа addr, которая была ранее определена в данной лекции, следует написать:
struct addr addr_info[100];
Для доступа к отдельным структурам массива addr_info следует проиндексировать имя массива. Например, для вывода содержимого поля zip третьей структуры, следует написать:
printf(“%ld”, addr_info[2].zip);
Как и массивы переменных, массивы структур индексируются с 0.
1.Передача структур в функции
2.Указатели на структуры
3.Битовые поля
4.Объединения
5.Перечисления
6.Использование typedef
7.Ввод, вывод, потоки и файлы
При передаче членов структур в функции фактически передаётся значение члена. Следовательно, передаётся обычная переменная.
Когда же структура используется как аргумент функции, передается вся структура с помощью стандартной передачи по значению. Это означает, что любые изменения, внесенные в содержимое структуры внутри функции, не повлияют на структуру, используемую в качестве аргумента.
Если структуру нужно использовать как параметр, то лучше всего определить структуру глобально, а затем использовать ярлык для объявления необходимых структурных переменных и параметров. Например,
#include <stdio.h>
struct struct_type {
int a, b;
char ch;
};
void f1(struct struct_type parm);
int main(void)
{
struct struct_type arg;
arg.a = 1000;
f1(arg);
return 0;
}
void f1(struct struct_type parm)
{
printf("%d", parm.a);
}
Данная программа выводит число 1000 на экран.
Язык С позволяет создавать указатели на структуры так же, как и на другие типы переменных.
Для доступа к членам структуры с помощью указателя на структуру следует использовать оператор «стрелка» ->.
Пример:
struct bal {
float balance;
char name[80];
} person;
struct bal *p;
p = &person;
p->balance = 0f;
1.Если ограничено место для хранения информации, можно сохранить несколько переменных в одном байте.
2.Некоторые интерфейсы устройств передают информацию, закодировав биты в один байт.
3.Некоторым процедурам кодирования необходимо получить доступ к отдельным битам в байте.
Стандартный вид объявления битовых полей следующий:
struct имя структуры {
тип имя1:длина;
тип имя2:длина;
…
тип имяN:длина;};
Пример
struct device {
unsigned active : 1;
unsigned ready : 1;
unsigned xmt_error : 1;
} dev_code;
Битовые поля имеют некоторые ограничения. Нельзя получить адрес переменной битового поля. Переменные битового поля не могут помещаться в массив. Переходя с компьютера на компьютер, нельзя быть уверенным в порядке следования бит (слева направо или справа налево). Любой код, использующий битовые поля, зависит от компьютера.