Int year;

Int pages;

};

Main()

{

Book b[100]; // выделение памяти под массив структур

Int i, n;

FILE *fp;

fp = fopen("books.dat", "rb"); // читаем 100 структур

n = fread(&b[0], sizeof(Book), 100, fp); // прочитали n шт.

Fclose ( fp );

for ( i = 0; i < n; i ++ ) // обрабатываем все, что прочитали

b[i].year = 2009;

fp = fopen("books.dat", "wb"); // записываем n шт.

Fwrite ( b, sizeof(Book), n, fp );

Fclose ( fp );

}

Динамическое выделение памяти

Предположим, что надо создать массив структур, размер которого выясняется только во

время работы программы. Для этого надо

1) объявить переменную типа указатель на нужный тип данных;

2) выделить память с помощью оператора newи запомнить адрес выделенного блока;

3) использовать новую область как обычный массив.

Book *B;

Int n;

printf("Сколько у вас книг? ");

scanf ( "%d", &n ); // вводим размер массива

B = new Book[n]; // выделяем память

// здесь работаем с массивом B, как обычно

delete B; // освобождаем память

Иногда требуется выделить в памяти одну структуру. При этом мы получаем ее адрес, который записываем в переменную-указатель. Как получить доступ к полю структуры?

Один из вариантов – «разыменовать» указатель, то есть обратиться к той структуре, на

которую он указывает. Если p– указатель на структуру типа Book, то обратиться к ее полюauthorможно как (*p).author. Эта запись означает «мне нужно поле authorтой структуры, на которую указывает указатель p».

В языке Си существует и другой способ обратиться к полю структуры: можно написать и

p->author, что значит то же самое, что и (*p).author, но более понятно. В следующем

примере динамически выделяется память на 1 структуру, ее поля считываются с клавиатуры, изатем структура записывается в конец текстового файла books.txt.

Book *p;

FILE *fp;

p = new Book; // выделить память на 1 структуру

printf("Автор "); // ввод полей через указатель

gets ( p->author );

printf("Названиекниги ");

gets ( p->title );

printf("Год издания, кол-во страниц ");

scanf("%d%d", &p->year, &p->pages);

fp = fopen("books.txt", "a"); // дописать в конец файла

fprintf("%s\n%s\n%d %d\n", // обращение через указатель

p->author, p->title, p->year, p->pages);








Дата добавления: 2015-10-05; просмотров: 624;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.005 сек.