Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛАБ_ПРОГР.doc
Скачиваний:
8
Добавлен:
12.11.2019
Размер:
1.67 Mб
Скачать

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

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

#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 соответственно.

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

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

struct addr ainfo[100];

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

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

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

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

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

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

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

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] */

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

      1. Передача всей структуры в функцию

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

Когда структура используется как параметр, самое важное – это запомнить, что тип аргумента должен соответствовать типу параметра. Лучший способ сделать это – определить структуру глобально, а затем использовать ее ярлык для объявления необходимых структурных переменных и параметров. Например:

#include <stdio.h>

struct struct_type {

int a, b;

char ch;

};

void f1(struct struct_type parm);

int main(void)

{

struct struct_type arg;

arg .a = 1000;

f1(arg);

return 0;

}

void f1(struct struct_type parm)

{

printf(“%d”, parm .a);

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]