4.7 KiB
title | date | draft | tags | ||||
---|---|---|---|---|---|---|---|
⤵️ Передача переменной по ссылке в C/C++ | 2023-03-27T23:25:00+03:00 | false |
|
Введение
Дано: передать в класс внешную переменную, чтобы её изменения во вне класса передавались в пременную класса.
Простым языком:
Мне необходимо было из класса обрабатывать данные телеметрии,
значения которых изменялись в программе
и хранились в объявленных перменных вне класса.
При передачи переменной variable
в функцию example_func()
передаётся значение перменной.
Если это значение изменить в переменной, само значение variable
не изменится.
void example_func(int variable);
Для реализации цели, нужно передать в функцию значение по ссылке.
Для этого использую операнд *
, символ звёдочки.
Простой пример функции, которая меняет значение переданных в неё
двуъ перменных x
и y
.
void swap(int *x, int *y) {
int temp;
temp = *x; /* сохраняю значения по адресу х */
*х = *у; /* помещаю у в х */
*у = temp; /* помещаю х в у */
}
Следует помнить, что swap()
или любая другая функция,
использующая указатели на параметры должна вызываться с адресами аргументов.
Для этого используется оператор &
, символ амперсанда.
Следующая программа демонстрирует правильный способ вызова swap()
:
#include <stdio.h>
void swap (int *x, int *y);
int main(void) {
int x, y;
x = 10;
у = 20;
swap(&x, &y);
printf ("%d %d", x, y);
return 0;
}
В данном примере переменной х
присваивается значение 10
,
а переменной у
значение 20
.
Затем вызывается функция swap()
с адресами переменных х
и у
.
Унарный оператор &
используется для получения адресов переменных.
Поэтому в функцию swap()
передаются адреса переменных х
и у
,
а не их значения.
Спасибо ресурсу c-cpp.ru за код.
Когда я кипел над кодом, то не мог вспомнить как проделать такой трюк.
(на Си последнее время пишу не часто, вот и запамятывал).
Вышеуказанную статью нагуглить получилось только
в ходе написании этого руководста, а результать того,
что я вспомнил самостоятельно, я расписал ниже.
Код с использованием класса
Имеется класс Example
, у которого есть приватная переменная
variable
, которая объявлена с сиволом звёдочки.
А также конструктор и метод show()
.
При создании класса я передаю в него ссылку на переменную
и сохраняю эту ссылку в приватной переменной класса variable
.
Метод show()
выводит значение перменной.
class Example {
public:
Example(int *xxx) { variable = xxx; }
void show() { cout << "value: " << *variable << endl; }
private:
int *variable;
};
Полный код:
#include <iostream>
using namespace std;
class Example {
public:
Example(int *xxx) { variable = xxx; }
void show() { cout << "value: " << *variable << endl; }
private:
int *variable;
};
int main() {
int test_var = 13;
Example x = Example(&test_var);
x.show(); // тут выведется 13
test_var = 14; // изменяю значение внешней переменной
x.show(); // тут выведется 14
return 0;
}