Битовые поля

Указатели на структуры

Передача структур в функции

План

Массивы структур

Для объявления массива структур следует сначала определить структуру, а затем объявить массив переменных данного типа. Например, для объявления 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;

Битовые поля имеют некоторые ограничения. Нельзя получить адрес переменной битового поля. Переменные битового поля не могут помещаться в массив. Переходя с компьютера на компьютер, нельзя быть уверенным в порядке следования бит (слева направо или справа налево). Любой код, использующий битовые поля, зависит от компьютера.





double arrow
Сейчас читают про: