Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




Инициализация структур без указателя

Пример

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

JL

J L

JL

JL

1 1

О о

I _ Is. I _ К

0 0 0 0


еюаааа


[31 [21



 






J

Рис. 1.11. Содержимое участка памяти, отведенного под структуру struct field type

На экран будет выведено следующее число:

1-211 + 1-2 9+ 1-2 6+ 1-2 4+ 1-21 + 1-2 ° = 2643.

Выбор элементов структуры или объединения. Выражение выбора элемента позволяет получить доступ к элементу структуры или объединения. Выражение имеет значение и тип выбранного элемента.


Возможны три способа доступа к полям [4]:

1) <выражение>.<идентификатор>, где <выражение> — значение типа struct или union; <идентификатор> — поле структуры или объединения;

2) <выражение> -> <идентификатор>, где <выражение> — указатель на структуру или объединение; <идентификатор> — поле структуры или объединения;

3) (<*выражение>).<идентификатор>, где <выражение> — указатель на структуру или объединение; <идентификатор> — поле структуры или объединения.

Работа со структурами с помощью указателей. Доступ к элементам структуры или объединения можно осуществить с помощью указателей. Для этого необходимо инициализировать указатель адресом структуры или объединения [14].

 

 

/* Объявление структуры типа book.*/      
St { ruct book        
char title [15];        
  char author [15];        
}; float value;        
/* Объявление массива ст руктур типа book,* /  
/* состоящего из 100 элементов. */      
/* Имя массива libry. */        
St ruct book libry [100];        
/* Объявление указателя на структуру типа book.*/
St ruct book *p;        
/* Инициализация указателя р адресом*/      
/* 0-го элемента массива структур типа book */
р= &libry[0];        

Для организации работы с массивом можно использовать указатель р или имя массива:

1) (*р).value, что равнозначно записи libry[0].value; 2)р-> value, что равнозначно записи libry[0].value.


 

gets (libry[i].title); /* Ввод названия книги.*/
gets (libry[i].author); /* Ввод имени автора.*/
scanf("%f", &libry[i].value); /* Ввод цены книги.*/
libry[i].value=123; /* Ввод цены книги.*/

 

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



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


Дата добавления: 2014-11-29; Просмотров: 484; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.019 сек.