gets((*p).title); | /* | Ввод названия книги.*/ |
gets ( ( *р) .author); | /* | Ввод имени автора.*/ |
(*р).value=123; | /* | Ввод цены книги.*/ |
gets(p —> title); | /* | Ввод названия книги.*/ |
gets( p —> author); | /* | Ввод имени автора.*/ |
p —> value=150; | /* | Ввод цены книги.*/ |
Указатель р содержит адрес начала массива— адрес нулевого элемента массива структур типа book. Используя р, можно осуществить доступ к каждому полю структуры типа book. Чтобы осуществить доступ к другим структурам, необходимо изменить адрес, хранящийся в р. Сдвиг указателя на / элементов массива осуществляется следующим образом:
p=p + i;.
Графическое представление массива структур в памяти ЭВМ показано на рис. 1.12.
Динамическое распределение памяти под массив структур.Динамически распределять память под массив структур необходимо в том случае, когда заранее не известен размер массива.
float value |
chartitle[15] |
Адрес начала массива
Название Имя Цена книги автора книги
Z |
/------------------
char author[15]
" libry[0]
p + 1
char title[15]
char author[15]
T
float value
" libry [1]
P + 2
chartitle[15]
char author[15]
Z
float value
■
bry[2]
p + i
chartitle[15]
z
char auth or[15]
Z
float value
libry [i]
p + 99/
chartitle[15]
Последний элемент массива структур
I
char atithor[15]
Z
float value
7
libry [99]
Рис. 1.12. Массив структур
Пример
#include <stdio.h> #include <alloc.h> struct book
{
char title [30] ; char author [30]; float value;
}; main ( )
{
struct book *p ; int n;
/*n - число структур book*/
printf("пВведите n:");
scanf("%u", &n); | |
p=(struct book *)malloc(n*sizeof( | struct book)); |
/^Переменная р содержит адрес */ | |
/^нулевой структуры типа book.*/ |