русс | укр

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

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

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

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


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

Использование указателя для создания вызова по ссылке


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


 

Несмотря на то, что в С++ по умолчанию используется вызов по значению, можно вручную создать вызов по ссылке, пepeдав в функцию адрес аргумента (т. е. указатель). В этом случае возникает возможность изменения значения аргумента вне функции. Как вы знаете, указатели передаются в функцию в принципе точно так же, как и любые другие значения. Разумеется, необходимо объявить параметры функции как указатели.

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

 

// Обмен значений переменных, на которые указывают х и у.

void swap(int *х, int *у)

{ .

int temp;

temp = *x; // сохраним значение с адресом х

*х = *у; // отправим значение из у в х

*у = temp; // отправим значение из х в у

}

 

Функция swap() объявляет два параметра-указателя х и у. Она использует эти параметры для обмена значений переменных, на которые указывают аргументы, передаваемые функции. Вспомним, что и *y обозначают переменные, находящиеся по адресам х и у. Таким образом, предложение

 

*x = *у;

 

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

Поскольку swap() ожидает получения двух указателей, вы должны вызывать swap() с указанием адресов переменных, у которых надо обменять значения. Как это делается, показано в приведенной ниже программе:

 

//Демонстрация варианта swap() с указателями.

#include <iostream>

using namespace std;

 

// Объявим, что swap() использует указатели,



void swap(int *x, int *y);

 

int main()

{

int i, j;

i = 10;

j = 20;

cout << "Исходные значения i и j: ";

cout << i << ' ' << j << '\n';

 

swap(&j, &i); // вызов swap () с адресами i и j

 

cout << "Новые значения i и j: " ;

cout << i << ' ' << j << '\n';

 

return 0;

}

//Обменяем значения, на которые указывают х и у.

void swap(int *x, int *y)

{

int temp;

temp = *x; // сохраним значение с адресом х

*x = *y, // поместим значение с адресом у

//в переменную с адресом х

*y = temp; //поместим значение с адресом х

//в переменную с адресом у

}

 

В функции main( ) переменной i присваивается значение 10, а переменной j - 20. Затем вызывается swap( ) с адресами i и j в качестве аргументов. Унарный оператор & позволяет получить адреса переменных. В результате в swap( ) передаются не значения переменных, а их адреса. После возврата из swap() значения iи j поменяются местами, как это видно из приведенного ниже вывода программы:

 

Начальные значения i и j : 10 20

Новые значения i и j : 20 10



<== предыдущая лекция | следующая лекция ==>
Два подхода к передаче аргументов | Перегрузка функций


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


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

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

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


 


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

 
 

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

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