Структурные переменные
Объявление структурных переменных приводит к выделению памяти для компонент структуры, куда можно записать данные или откуда можно прочитать их. Для объявления структурных переменных имеются несколько способов.
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; просмотров: 786;