Лабораторная работа № Ознакомление с фундаментальными типами данных План: Целые типы данных


Download 0.88 Mb.
bet19/64
Sana13.09.2023
Hajmi0.88 Mb.
#1677324
TuriЛабораторная работа
1   ...   15   16   17   18   19   20   21   22   ...   64
Bog'liq
Лаборатория № 1 - 6

#include
using namespace std;
void Obmen(double *x, double *y);
int main()
{
double a = 2.5, b = 3.1;
cout << "Do Obmen: a=" << a << " b=" << b << endl;
Obmen(&a, &b);
cout << "Posle Obmen: a=" << a << " b=" << b << endl;
return 0;
}


void Obmen(double *x, double *y)
{
double c;
cout << "Function Obmen start:\n *x=" << *x << " *y=" << *y << endl;
c = *x;
*x = *y;
*y = c;
cout << "Function Obmen end:\n *x=" << *x << " *y=" << *y << endl;
}
Результаты выполнения программы:
Do Obmen: a=2.5 b=3.1
Function Obmen start:
*x=2.5 *y=3.1
Function Obmen end:
*x=3.1 *y=2.5
Posle Obmen: a=3.1 b=2.5
Печать на экране монитора наглядно показывает, что обмен произведён, и исходные переменные теперь имеют новые значения, т.е. передача данных по адресу действительно позволяет вернуть в вызывающую функцию результат работы вызываемой подпрограммы.
Как это работает? Рассмотрим данный вопрос подробнее, используя пример с обменом данных. Для наглядности приведём рисунок:


В вызывающей функции (в нашем случае — в main()) вычисляются адреса объектов, передаваемых по адресу ( у нас — адреса переменных a и b. Пусть это будут числа 1000 и 1008), и затем эти адреса копируются в ячейки памяти — указатели, память под которые выделена в функции Obmen()_(это_x_и_y'>Obmen() (это x и y). Зная адрес переменной, например, адрес переменной a, который теперь хранится в указателе x, можно, пользуясь операцией разыменование, не только прочитать, но и изменить значение исходной переменной.


Ни какой реальной передачи данных (в смысле копирования) из подпрограммы Obmen() назад в main() не делается. Мы на самом деле через указатели работаем с исходными объектами! Поэтому после выхода из функции Obmen() имеем изменённые переменные a и b (если быть точнее, переменные изменятся ещё до выхода из функции,то есть в момент перестановки в самой функции Obmen()).

Download 0.88 Mb.

Do'stlaringiz bilan baham:
1   ...   15   16   17   18   19   20   21   22   ...   64




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling