русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2015-06-12; просмотров: 495; Нарушение авторских прав


Формальным параметром функции может являться вся структура. При вызове такой функции тип структуры, используемой в качестве фактического параметра, должен соответствовать типу формальной структуры. Для этого, как правило, структурный тип определяется глобально, например, тот же tst, а затем используется это имя как при описании функции, так и при её вызове.

Как и для обычных переменных, возможна передача структур в функцию одним из трёх способов: 1) по значению, 2) по ссылке, 3) с помощью указателя.

1) Пусть заголовок функции такой:

void Fun1 (tst S,…);

Многоточие означает, что кроме структуры, могут быть и другие параметры функции. В её тексте можно использовать поля структуры

S.m, S.per, S.p и *(S.p), S.ard и S.ard[j], S.t и S.t[k],

где j является индексом динамического массива ard, а k — индекс для строки t. В вызывающей функции объявляем структурную переменную, определяем её поля и вызываем функцию:

tst S1; … ; Fun1 (S1,…);

В этом случае структуры S1 и S занимают разные участки памяти, т. е. при выполнении функции S1 копируется в S. Поэтому изменение полей структуры S в функции не влечёт за собой изменения соответствующих полей структуры S1.

2) Если надо в функции получить структуру или изменить некоторые или все её поля, то используем ссылку на структуру. Тогда заголовок функции будет таким:

void Fun2 (tst & S,…);

В ней, как и в первом варианте, можно использовать поля структуры с теми же обозначениями:

S.m, S.per, S.p и *(S.p), S.ard и S.ard[j], S.t и S.t[k].

В вызывающей функции объявляем переменную аналогично: tst S2; и вызываем функцию:

Fun2 (S2,…);

В этом случае в отличие от предыдущего варианта структуры S2 и S занимают один и тот же участок памяти, т. е. одна и та же структура в функции Fun2 названа S, а в вызывающей — S2. Поэтому изменение структуры S будет передано в структуру S2.



3) Более профессиональным, классическим способом возврата структуры из функции является использование указателя на структуру. В этом случае заголовок функции будет таким:

void Fun3 (tst* S,…);

В ней доступ к полям этой структуры выполняется с помощью рассмотренной ранее операции “стрелка” (“->”) и, если надо, операции разыменование (“*”):

S->m, S->per, S->p и *(S->p), S->ard и S->ard[j], S->t и S->t[k].

Если в вызывающей функции объявлена “обычная” переменная структурного типа, а не указатель (tst S1;), то вызываем функцию так: Fun3 (&S1,…); Если в вызывающей функции объявлен указатель на структуру (tst* pS;), то его надо не забыть определить одним из рассмотренных ранее способов, например, pS= new tst; Тогда функцию вызываем так: Fun3 (pS,…);

При использовании указателей структуры не копируются, а копируются только адреса. Другими словами, как будто выполняется присваивание S=pS, которое в программе, конечно, явно не записывается. После этого S и pS содержат адреса начала одного и того же участка памяти, в котором один раз хранится структура. В функции Fun3 доступ к ней осуществляется с помощью указателя S, а в вызывающей функции — с помощью указателя pS.

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



<== предыдущая лекция | следующая лекция ==>
Передача полей структуры в функцию. | Cтруктуры и классы.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.09 сек.