Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lekcii_1_10 / Лекция 10.docx
Скачиваний:
52
Добавлен:
21.05.2015
Размер:
547.09 Кб
Скачать

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

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

Используя структуру в качестве параметра, помните, что тип аргумента должен соответствовать типу параметра. Например, в следующей программе сначала объявляется структура sample, а затем функция f1() принимает параметр типа sample.

// Передача функции структуры в качестве аргумента.

#include <iostream>

using namespace std;

// Определяем тип структуры.

struct sample {

 int a;

 char ch;

};

void f1(sample parm);

int main()

{

 struct sample arg; // Объявляем переменную arg типа sample.

 arg.a = 1000;

 arg.ch = 'x';

 f1(arg);

 return 0;

}

void f1(sample parm)

{

 cout << parm.a << " " << parm.ch << "\n";

}

Здесь как аргумент arg в функции main(), так и параметр parm в функции f1() имеют одинаковый тип. Поэтому аргумент arg можно передать функции f1(). Если бы типы этих структур были различны, при компиляции программы было бы выдано сообщение об ошибке.

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

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

// Демонстрация присваивания значений структур.

#include <iostream>

using namespace std;

struct stype {

 int a, b;

};

int main()

{

 stype svar1, svar2;

 svar1.a = svar1.b = 10;

 svar2.a = svar2.b = 20;

 cout << "Структуры до присваивания.\n";

 cout << "svar1: " << svar1.a << ' ' << svar1.b;

 cout <<'\n';

 cout << "svar2: " << svar2.a << ' ' << svar2.b;

 cout <<"\n\n";

 svar2 = svar1; // присваивание структур

 cout << "Структуры после присваивания.\n";

 cout << "svar1: " << svar1.a << ' ' << svar1.b;

 cout << '\n';

 cout << "svar2: " << svar2.a << ' ' << svar2.b;

 return 0;

}

Эта программа генерирует следующие результаты.

Структуры до присваивания.

svar1: 10 10

svar2: 20 20

Структуры после присваивания,

svar1: 10 10

svar2: 10 10

В C++ каждое новое объявление структуры определяет новый тип. Следовательно, даже если две структуры физически одинаковы, но имеют разные имена типов, компилятор будет считать их разными и не позволит присвоить значение одной из них другой. Рассмотрим следующий фрагмент кода. Он некорректен и поэтому не скомпилируется.

struct stype1 {

 int a, b;

};

struct stype2 {

 int a, b;

};

stype1 svar1;

stype2 svar2;

svar2 = svar1; // Ошибка из-за несоответствия типов.

Несмотря на то что структуры stype1 и stype2 физически одинаковы, с точки зрения компилятора они являются отдельными типами.

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

Соседние файлы в папке lekcii_1_10