ИЗМЕНЕНИЕ ПЕРЕМЕННЫХ В ВЫЗЫВАЮЩЕЙ ПРОГРАММЕ

ИЗМЕНЕНИЕ ПЕРЕМЕННЫХ В ВЫЗЫВАЮЩЕЙ ПРОГРАММЕ

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

х = у;

y = х;

не является решением поставленной задачи, потому что к тому моменту, когда начнет выполняться оператор во второй строке, первоначальное значение переменной x будет потеряно. Чтобы сохранить это первоначальное значение, необходимо дополнить данный фрагмент еще одной строкой:

temp = х;

х = у;

у = temp;

     Теперь у нас есть требуемый метод; реализуем его в виде некоторой функции, а также создадим драйвер для eе проверки. Чтобы сделать более ясным, какая переменная принадлежит функции main( ), а какая - функции interchange( ), мы будем использовать переменные х и у в первой из них, и u и v - во второй.

/* обмен1 */

main( )

{

int х = 5, у = 10;

printf(" Вначале х = %d  и у = %d. " , х, у);

interchange(x, у);

prinlf(" Теперь х = %d и у = %d. " , х, у);

}

interchangce(u, v) int u, v;

{

int temp;

temp = u;

u = v;

v = temp;

}

Попробуем выполнить эту программу. Результаты будут выглядеть следующим образом:

Вначале х = 5 и у = 10.

Теперь х = 5 и у = 10.

Не может быть! Значения переменных не поменялись местами! Вставим в программу interchange( ) несколько операторов печати, чтобы понять причину допущенной ошибки.

/* обмен2 */

main( )

{

int х = 5, у = 10;

printf(" Вначале х = %d и у = %d. ", х,у);

interchange(x, у);

printf(" Теперь х = %d и у = %d. ", х, у);

}

 interchange(u, v)

int u, v;

{

 int temp;

printf(" Вначалеu = %d иv = %d. ",  u, v);

temp = u;u = v;v = temp;

printf(" Теперь u = %d и  v = %d. ", u, v);

}

Результат работы этой программы выглядит так:

Вначале x  = 5 и y = 10.

Вначале u  = 5 и v = 10.

Вначале u  = 10 и  v = 5.

Вначале x  = 5 и y = 10.

Отсюда видно, что ничего неправильного в работе функции interchange( ) нет; она осуществляет обмен значениями между переменными u и v. Проблема состоит в передаче результатов обратно в функцию main( ). Как мы уже указывали, функции interchange( ) и main() используют различные переменные, поэтому обмен значениями между переменными u и v не оказывает никакого влияния на х и у! А нельзя ли каким-то образом воспользоваться оператором return? Мы могли бы, конечно, завершить тело функции interchange( ) строкой

return(u);

и изменить форму вызова в функции main( ) следующим образом:

х = interchange(x, у);

В результате такого обращения к функции переменная х получит новое значение, но у при этом не изменится.

     С помощью оператора return в вызывающую программу можно передать только одну величину. Но нам нужно передать две величины. Это оказывается вполне осуществимым! Для этого нужно лишь воспользоваться "указателями".

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Таблицы информации о программе

Из книги Технология Windows Installer. Часть I. Обзор возможностей автора Алифанов Андрей

Таблицы информации о программе Таблицы этой группы содержат важную информацию о пакете инсталляции, используемую на протяжении всего процесса инсталляции.Состоит эта группа из пяти таблиц: Имя таблицы Краткое описание Property В этой таблице хранятся все свойства 1


2 Техническая информация о программе

Из книги FB2-Librarian (Библиотекарь) Руководство автора Пустовит Дмитрий

2 Техническая информация о программе Язык программирования – Delphi.Используемая база данных – СУБД FireBird 1.5 (При выборе способа хранения «база данных» – книги и описания целиком, или только описания при хранении самих книг в файловой системе).Требования: MSXML 4.0, Embedded FireBird


Просмотр и изменение значений переменных

Из книги Windows Script Host для Windows 2000/XP автора Попов Андрей Владимирович

Просмотр и изменение значений переменных Получать и изменять текущие значения переменных или свойств объектов во время остановки исполнения сценария позволяет окно Command, которое вызывается командой View|Command Window. При этом анализ переменных в JScript- и VBScript-сценариях


Комментарии к программе 15.3

Из книги Системное программирование в среде Windows автора Харт Джонсон М

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


21.6.1 Вызовы в серверной программе TCP

Из книги TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) автора Фейт Сидни М

21.6.1 Вызовы в серверной программе TCP 1. sockMain = socket (AF_INET, SOCK_STREAM, 0); Вызов socket имеет форму:дескриптор_socket = socket(адрес_домена, тип_коммуникации, протокол)Напомним, что интерфейс socket может использоваться для других видов коммуникаций, например XNS. AF_INET указывает на семейство


21.7.1 Вызовы в клиентской программе TCP

Из книги Программирование на языке Ruby [Идеология языка, теория и практика применения] автора Фултон Хэл

21.7.1 Вызовы в клиентской программе TCP 1. sock = socket(AF_INET, SOCK_STREAM, 0);Клиент создает блок управления пересылкой ("socket") так же, как это делал сервер.2. Сервер должен инициализировать адресную структуру для использования в bind.Эта структура содержит локальный IP-адрес и номер порта


21.10.1 Вызовы в серверной программе UDP

Из книги VBA для чайников автора Каммингс Стив

21.10.1 Вызовы в серверной программе UDP 1. sockMain = socket(AF_NET, SOCK_DGRAM, 0);Семейство адресов — снова Интернет.2. bzero((char *)&servAddr, sizeof(servAddr));servAddr.sin_family = AF_INET;servAddr.sin_addr.s_addr = htonl(INADDR_ANY);servAddr.sin_port = 0;Вызовы инициализации адресной структуры сервера те же, что и в программе для TCP.3. bind(sockMain,


21.11.1 Запросы в клиентской программе UDP

Из книги ПК без напряга автора Жвалевский Андрей Валентинович

21.11.1 Запросы в клиентской программе UDP 1. sock = socket(AF_INET, SOCK_DGRAM, 0); UDP клиента создает socket для UDP.2. bzero((char *)&servAddr, sizeof(servAddr));servAddr.sin_family = AF_INET;hp = gethostbyname(argv[1]);bcopy(hp->h_addr, &servAddr.sin_addr, hp->length);servAddr.sin_port = htons(atoi(argv[2]));Структура servAddr заполнена введенными конечным пользователем


Отступы в программе

Из книги Язык Си - руководство для начинающих автора Прата Стивен

Отступы в программе Запомните: следует выработать правила использования отступов и неуклонно их придерживаться. Компилятор VBA игнорирует все пробелы в начале строк, так что вы можете смело использовать отступы для наведения порядка. Сравните следующие два фрагмента


Использование объектов в программе

Из книги Поиск персонала с помощью компьютера. Как сэкономить на кадровом агентстве автора Гладкий Алексей Анатольевич

Использование объектов в программе Теперь, когда теоретические основы пройдены, наступает время практических рекомендаций по программированию с использованием объектов VBA. Начнем, пожалуй, с использования в программном коде свойств, методов и событий объектов, а уж


Основы работы в программе

Из книги автора

Основы работы в программе Сразу договоримся, что рассказ пойдет о самой распространенной на сегодня версии Word – 2007, которая входит в состав пакета Microsoft Office 2007.Запустить Word можно двойным щелчком на любом документе, значок которого содержит характерную букву «W» (рис.


13.2. Кратко о программе GIMP

Из книги автора

13.2. Кратко о программе GIMP Для редактирования растровой графики служит программа GIMP. Эта программа, особенно ее вторая версия, — достойный Linux-аналог известной программы Photoshop.В большинстве случаев работа любителей с тем же Photoshop сводится к несложным операциям с


16.1. Немного о программе

Из книги автора

16.1. Немного о программе OOo Calc (Электронные таблицы) — это вторая наряду с OOo Writer часто используемая программа из пакета OpenOffice (рис. 16.1). Программа походит на Microsoft Excel, поэтому с ней работать сможет любой, кто хотя бы раз видел старый добрый Excel. Как электронная таблица, Calc


Переходы в программе

Из книги автора

Переходы в программе Ключевые слова: break, continue, gotoОбщие замечания: Эти три команды вызывают переход от одного оператора программы к другому, расположенному в ином месте (в теле программы).


Работа с кандидатами в программе 1С 8.0

Из книги автора

Работа с кандидатами в программе 1С 8.0 Как известно, одной из самых популярных, а по оценкам многих независимых экспертов – самой популярной программой, предназначенной для автоматизации учетных и управленческих процессов на предприятии, является система 1С. До