Инициализация массива структур при помощи указателя р

 

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.*/