Инициализация. /* Что напечатает программа?

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);

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: