Передача членов структур в функции




Лабораторная работа № 15

Структуры. Работа с файлами, содержащими структуры

 

 

Цель работы

1.1 Получение навыков программирования с использованием структур.

1.2 Получение навыков обработки файлов, содержащих структуры.

Техническое обеспечение

2.1 Персональная ЭВМ IBM PC/286 и более поздних моделей.

2.2 Клавиатура.

2.3 Дисплей.

2.4 Печатающее устройство.

Программное обеспечение

3.1 Операционная система MS DOS версия 5.0 и более поздние версии.

3.2 Система программирования Borland C++ версия 3.1 и более поздние версии.

Постановка задачи

Выполнить обработку файлов, содержащих структуры, согласно заданного варианта.

 

Содержание отчета

5.1. Тема и цель работы.

5.2. Схема алгоритма решения задачи.

5.3. Текст программы.

5.4. Результаты выполнения программы.

 

Общие сведения

Структуры

Структура – это совокупность переменных разного типа, объединенных одним именем, предоставляющая общепринятый способ совместного хранения информации. Объявление структуры приводит к образованию шаблона, используемого для создания объектов структуры. Переменные, образующие структуру, называются элементами структуры (или полями структуры).

Обычно все элементы структуры связаны друг с другом. Например, информация об имени и адресе, находящаяся в списке рассылки, обычно представляется в виде структуры. Следующий фрагмент кода объявляет шаблон структуры. Ключевое слово struct сообщает компилятору об объявлении структуры.

struct addr {

char name[30];

char street[40];

char city[20];

char state[40];

unsigned long int zip;

};

Имя структуры addr идентифицирует структуру данных и является спецификатором типа. Имя структуры часто используется как ярлык.

На данный момент на самом деле не создано никакой переменной. Определена только форма данных. Для объявления переменной следует написать:

struct addr addr_info;

В данной строке происходит объявление переменной addr_info типа addr.

При объявлении структуры можно одновременно объявить одну или несколько переменных. Например:

struct addr {

char name[30];

char street[40];

char city[20];

char state[40];

unsigned long int zip;

} addr_info, binfo, cinfo;

объявляет структуру addr и объявляет переменные addr_info, binfo, cinfo данного типа.

Важно понять, что каждая структурная переменная содержит свои собственные копии элементов, образующих структуру. Например, поле zip переменной binfo отделено от поля zip переменной cinfo.

Если необходима только одна структурная переменная, то нет необходимости в ярлыке структуры. Это означает, что

struct {

char name[30];

char street[40];

char city[20];

char state[40];

unsigned long int zip;

} addr_info;

объявляет одну переменную addr_info с типом, определенным предшествующей ей структурой.

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

Доступ к отдельным членам структуры осуществляется с помощью оператора «точка» (.). Например, следующий фрагмент присваивает элементу zip структурной переменной addr_info значение 12345:

addr_info.zip = 12345;

Стандартный вид доступа следующий:

< имя_структуры >. < имя_элемента >

Следовательно, для вывода поля zip на экран следует написать:

cprintf(“%ld”, addr_info.zip);

Для доступа к отдельным символам addr_info. name можно использовать индекс name. Например, можно вывести содержимое addr_info.name посимвольно с помощью следующего фрагмента:

register int t;

for (t=0; addr_info.name[t];t++) putchar(addr_info.name[t]);

Присваивание структур

Информация, содержащаяся в одной структуре, может быть присвоена другой структуре того же типа с помощью оператора присваивания, то есть не надо присваивать значение каждого элемента по отдельности. Например:

#include <stdio.h>

int main(void)

{

struct {

int a;

int b;

} x, y;

x. a = 10;

x. b = 20;

y = x;

printf(“Содержание y: %d %d.”, y.a, y.b);

return 0;

}

После присваивания y.a и y.b будут содержать значения 10 и 20 соответственно.

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

Наиболее часто структуры используются в виде массивов структур. Для объявления массива структур следует сначала определить структуру, а затем объявить массив переменных данного типа. Например, для объявления 100-элементного массива структур типа addr, которая была объявлена ранее, следует написать:

struct addr ainfo[100];

В результате получаем набор из 100 переменных, устроенных, как объявлено в типе структуры addr.

Для доступа к отдельным структурам массива ainfo следует проиндексировать имя массива. Например, для вывода содержимого поля zip третьей структуры, следует написать:

printf(“%d”, ainfo[2].zip);

Как и массивы переменных массивы структур индексируются с нуля.

 

Передача структур в функции

Передача членов структур в функции

При передаче членов структур в функции фактически передается значение элемента структуры. Следовательно, передается обычная переменная. Рассмотрим для примера следующую структуру:

struct fred {

char x;

int y;

float z;

char s[10];

} mike;

Ниже приведены примеры передачи каждого элемента в функцию:

func (mike.x); /* Передача символьного значения х */

func (mike.y); /* Передача целочисленного значения у */

func (mike.z); /* Передача вещественного значения z */

func (mike.s); /* Передача адреса строки s */

func (mike.s[2]); /* Передача символьного значения s [2] */

Тем не менее, если необходимо передать адрес отдельного элемента структуры, следует поместить оператор & перед именем структуры. Например, для передачи адреса элементов структуры mike следует написать:

func (&mike.x); /* Передача адреса символа х */

func (&mike.y); /* Передача адреса целого у */

func (&mike.z); /* Передача адреса вещественного z */

func (mike.s); /* Передача адреса строки s */

func (&mike.s[2]); /* Передача адреса символа s [2] */

Обратим внимание, что оператор & стоит перед именем структуры, а не перед именем элемента.



Поделиться:




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

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-27 Нарушение авторских прав и Нарушение персональных данных


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