Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Указатели - аргументы функций

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

Для того, чтобы разобраться с механизмом передачи аргументов в функцию, с последующим изменением их значений внутри вызванной функции, рассмотрим функцию my_swap, которая меняет местами значения своих параметров. Другими словами, если объявлены две переменные типа int a, b; причем, a=7 и b=10, то после вызова функции my_swap(&a, &b) результат будет следующим: а=10 и b=7.

Чтобы получить желаемый эффект, надо вызываемой функции передать указатели на те значения, которые должны быть изменены: my_swap(&a, &b); Так как оператор & получает адрес переменной, то &a вернет нам адрес переменной а. Таким образом, используя оператор & для получения адреса переменных (значение которых должно будет измениться в функции), мы сможем передать в функцию адреса наших переменных.

Графически это можно представить следующим образом:

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

Рассмотрим реализацию функции, которая будет изменять значения своих параметров:

//реализация функции, которая будет изменять значения своих параметровvoid my_swap(int *px, int *py) { int temp;//производим стандартную перестановку через дополнительную переменную temp temp=*px; //переменной temp писвоили 7 *px=*py; //переменная а приняла значение 10 *py=temp; //переменная b приняла значение 7}

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

my_swap(&a, &b);

Разобрав механизм вызова функции с передачей параметров по ссылке, рассмотрим практический пример использования, опять таки, нашей функции:

/*Иллюстрация использования механизма вызова функции спередачей параметров по ссылке*/ #include <iostream.h>//реализация функции, которя будет изменять значения своих параметровvoid my_swap(int *px, int *py) { int temp;//производим стандартную перестановку через дополнительную переменную temp temp=*px; //переменной temp писвоили 7 *px=*py; //переменная а приняла значение 10 *py=temp; //переменная b приняла значение 7} void main(){ int a,b; //объявили две переменные типа int cout<<"Enter a = "; //вывели на экран предложение ввести значение переменной а cin>>a; cout<<"Enter b = "; //вывели на экран предложение ввести значение переменной b cin>>b; my_swap(&a, &b); //ВЫЗОВ ФУНКЦИИ С ПЕРЕДАЧЕЙ ПАРАМЕТРОВ ПО ССЫЛКЕ cout<<"New value of a = "<<a<<endl; //выведем на экран результат работы нашей программы cout<<"New value of b = "<<b<<endl;}

Давайте, подведем итоги:

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

  1. Объявите параметры-указатели в заголовке функции.
  2. Используйте разыменованный указатель в теле функции.
  3. Передавайте адреса в качестве аргументов при вызове функции.

 

<== предыдущая лекция | следующая лекция ==>
Пример 3. А теперь - практика!!! Как всегда, будьте особо внимательны при анализе примеров | Предположения о характере функционирования систем
Поделиться с друзьями:


Дата добавления: 2014-01-14; Просмотров: 390; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




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