Book b1, b2;
// здесь нужно заполнить структуру b1
memcpy(&b2, &b1, sizeof(Book)); // куда, откуда, сколько байт
Самый простой способ – третий. Достаточно просто написать
b2 = b1;
При этом программа скопирует одну структуру в другую «бит в бит». Зачем же рассказыватьпро остальные два способа? Только для того, чтобы понять, как это все работает, посколькунепонимание ведет к трудноуловимым ошибкам.
Массивы структур
Структуры служат для обработки большого объема информации, поэтому чаще всего в
программе используются массивы структур. Они объявляются так же, как обычно, но предварительно (выше) надо объявить саму структуру как новый тип данных.
Для обращения к полю структуры также используют точку, но теперь надо указать в квад-
ратных скобках еще номер нужной структуры, например
Book A[20];
...
A[12].pages = 50;
for ( i = 0; i < 20; i ++ ) // цикл по всем структурам в массива
puts(A[i].title); // вывести название книги
Если вы работаете с двоичными файлами, то чтение и запись всего массива структур выполняется в одну строчку. Покажем приемы работы с двоичным файлом на примере.
Пример.В файле books.datзаписаны структуры типа Book. Известно, что их не больше 100.
Требуется прочитать их в память, у всех книг установить 2009год издания и записать обратнов тот же файл.
Поскольку по условию известно, что структур не больше 100, заранее выделяем в памяти массив на 100 структур.
Book b[100];
При чтении из файла пытаемся читать все 100 структур:
n = fread ( &b[0], sizeof(Book), 100, fp );
Чтобы определить, сколько структур было в действительности прочитано, используем значениеn, которое функция freadвозвращает в качестве результата. Вот полная программа:
#include <stdio.h>
struct Book { // объявление нового типа данных
char author[40];
char title[80];
Дата добавления: 2015-10-05; просмотров: 691;