struct date boy={3,8,1988};
/* Что напечатает программа? */
#include <stdio.h>
struct house {
float ds;
int rooms;
int stories;
char *address;
};
main()
{
struct house fr={2500.5, 6, 5, " Пр. победителей"};
struct house *sign;
sign=&fr;
printf("%d %d\n",fr.rooms, sign->stories);
printf ("%s\n",fr.address);
printf("%c%c\n",sign->address[7],fr.address[10]);
}
/* Личная библиотека */
#include <stdio.h>
#include<windows.h>
#include <string.h>
#define MAXTIT 40 /* название */
#define MAXAUT 30 /* автор */
#define MAXBKS 100 /* число книг */
#define STOP ""
struct book {
char title [MAXTIT];
char author[MAXAUT];
int value;
};
void main()
{
char cStr1[]="Введите, пожалуйста, название книги:";
char cStr2[]="(для останова нажмите клавишу [ввод] в начале строки)";
char cStr3[]="Введите фамилию автора:";
char cStr4[]="Введите цену:";
char cStr5[]="Введите название следующей книги:";
char cStr6[]="Список книг:";
CharToOem(cStr1,cStr1);
CharToOem(cStr2,cStr2);
CharToOem(cStr3,cStr3);
CharToOem(cStr4,cStr4);
CharToOem(cStr5,cStr5);
CharToOem(cStr6,cStr6);
struct book libry[MAXBKS];
int count=0;
int index;
printf("%s\n",cStr1);
printf("%s\n",cStr2);
while(strcmp(gets(libry[count].title), STOP)!=0 && count<MAXBKS)
{
printf("%s\n",cStr3);
gets(libry[count].author);
printf("%s\n",cStr4);
|
|
scanf("%d",&libry[count++].value);
while(getchar()!='\n'); /* очистить строку ввода */
if (count<MAXBKS)
printf("%s\n",cStr5);
}
printf("%s\n",cStr6);
for (index=0; index<count; index++)
printf("%-40s | %-30s | %3d\n",libry[index].title,
libry[index].author,libry[index].value);
}
Объединения (union)
Существует еще один тип данных для размещения в памяти нескольких переменных разного типа. Объявляется объединение так же, как и структура.
union u {
int iVar;
char cStr;
long int lVar;
};
Это шаблон объединения.
Пример:
union u alfa,beta; // можно с шаблоном
В отличие от структуры для переменной типа union места в памяти выделяется ровно столько, сколько надо элементу объединения, имеющему наибольший размер в байтах.
Остальные переменные будут располагаться в том же месте памяти. Синтаксис использования элементов объединения такой же, как и для структуры:
u.cStr=’5’;
Для объединений также разрешена операция ->, если мы обращаемся к объединению с помощью указателя.
#include<stdio.h>
void main()
{
union u {
int iVar;
char cStr;
long int lVar;
double fVar;
};
union u alfa; //
union u *ptr;
ptr=&alfa;
ptr->iVar=5;
printf("d=%d\n",sizeof(alfa));
printf("%p\tiVar=%d\n",&alfa.iVar,alfa.iVar);
ptr->fVar=5.6;
printf("%p\tfVar=%f\n",&alfa.fVar,alfa.fVar);
}