Структурные переменные

Объявление структурных переменных приводит к выделению памяти для компонент структуры, куда можно записать данные или откуда можно прочитать их. Для объявления структурных переменных имеются несколько способов.

1. Установить структурный шаблон:

struct sprav {

char fio[20];

Long num;

};

Объявить простую переменную, массив структур, указатель на структуру: struct sprav tel1, tel2[5], *tel3;

2. Установить структурный шаблон с помощью макроопределения:

#define SPRAV struct sprav

SPRAV {

char fio[20];

Long num;

};

Объявить переменные:

SPRAV sp1, sp2[6], *sp3;

3. Объявить переменные одновременно с установкой шаблона (если на данную структуру вы больше не ссылаетесь):

struct {

char fio[20];

Long num;

} tel1, tel2[3], *tel3;

4. Ввести новый тип данных (TEL)-структура определенного вида:

typedef struct {

char fio[20];

Long num;

} TEL;

Объявить переменные нового типа:

TEL tel1, tel2[6], *tel3;

Если программа достаточно объемна, представляется более удобным четвертый способ.

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

 

Инициализировать можно только внешние или статические структуры.


static struct {

char fio[20];

Long num;

} tel[2]={

"Иванов Ф.А.", 456756,

"Петров В.П.", 632345

};

Доступ к компонентам структуры

Доступ к компонентам структуры продемонстрируем с помощью примеров.

Пример 1.


/* Обращение к элементам структуры через имя переменной */

#include <stdio.h>

#include <conio.h>

Void main(void)

{

struct{

char fio[20]; /* фамилия */

long num; /* телефон */

} tel1, tel2;

Clrscr();

puts("введите фио абонента-");

Gets(tel1.fio);

puts("введите его номер-");

scanf("%ld",&tel1.num);

tel2=tel1; /* нельзя так же сравнивать структуры */

puts("Введено:");

printf("Фамилия :%s номер: %ld\n",tel2.fio,tel2.num);

}

Пример 2.

/* Динамическое выделение памяти для структуры */

/* Обращение к элементам структуры через указатель */

#include <stdio.h>

#include <conio.h>

#include <alloc.h>

struct sprav {

char fio[20];

Long num;

};

Void main(void)

{

struct sprav *tel1, *tel2;

Clrscr();

/* Выделение памяти для структуры */

tel1=(struct sprav *)malloc(sizeof(struct sprav));

tel2=(struct sprav *)malloc(sizeof(struct sprav));

puts("введите фио абонента-");

gets(tel1->fio);

puts("введите его номер-");

scanf("%ld",&tel1->num);

*tel2= *tel1;

puts("Введено:");

printf("Фамилия :%s номер: %ld\n",(*tel2).fio,(*tel2).num);

}


 


Массив структур

 


Пример 3.

/* Массив структур. Обращение к элементам структуры через */

/* имя элемента массива */

#include <stdio.h>

#include <conio.h>

#include <string.h>

#define SPRAV struct sprav

Void main(void)

{

SPRAV{

char fio[20];

Long num;

};

SPRAV tel[5]; /* массив структур - 5 элементов */

char fio_tek[20];

Int i;

Clrscr();

/* ввод данных в массив структур */

for(i=0; i<5; i++)

{

puts("введите фио абонента-");

gets(tel[i].fio);

puts("введите его номер-");

scanf("%ld",&tel[i].num);

Getchar();

}

puts("Выбор телефона по фамилии");

Gets(fio_tek);

/* поиск структуры по фамилии абонента */

for(i=0; i<5; i++)

if(!strcmp(fio_tek,tel[i].fio)) break;

if(i!=5) /* цикл закончен по break */

printf("номер абонента %s равен %ld\n",fio_tek, \

tel[i].num);

else /* цикл выполнился полностью */

puts("Абонент не найден");

}

 

Пример 4.

/* Массив структур. Память выделяется динамически. */

/* Обращение к элементам структуры через указатель */

#include <stdio.h>

#include <conio.h>

#include <string.h>

#include <alloc.h>

typedef struct{

char fio[20];

Long num;

} TEL;

Void main(void)

{

TEL *tel;

char fio_tek[20];

Int i;

Clrscr();

/* Выделение памяти для массива - 3 элемента */

tel=(TEL *)malloc(sizeof(TEL)*3);

for(i=0; i<3; i++)

{

puts("введите фио абонента-");

gets((tel+i)->fio);

puts("введите его номер-");

scanf("%ld",&(tel+i)->num);

Getchar();

}

puts("Выбор телефона по фамилии");

Gets(fio_tek);

for(i=0; i<5; i++,tel++)

if(!strcmp(fio_tek,tel->fio)) break;

if(i!=5)

printf("номер абонента %s равен %ld\n",fio_tek, \

tel->num);

Else

puts("Абонент не найден");

}









Дата добавления: 2015-12-26; просмотров: 740;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

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

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.02 сек.