Вызов функции C++ по указателю

C++ Программирование и разработка

Существует несколько способов отправки данных (или переменных) в качестве аргумента функции. Двумя наиболее распространенными являются передача по значению и передача по ссылке.

Пример:

С++

// C++ Program to demostrate
// Pass by value and
// Pass by refernce
#include <iostream>
 
using namespace std;
 
// Pass by refernce
void swap(int& x, int& y)
{
    int temp = x;
    x = y;
    y = temp;
}
 
// Pass by value
int sum(int x, int y) { return x + y; }
 
int main()
{
    int x = 1, y = 2;
    cout << "Before swap:" << x << " " << y << endl;
    swap(x, y);
    cout << "After swap:" << x << " " << y << endl;
 
    int c = sum(x, y);
    cout << "Sum:" << c << endl;
    return 0;
}

Выход

Before swap:1 2
After swap:2 1
Sum:3

Другой менее известный метод — Call by Pointer. Передача указателя позволяет функции изменять переменную без создания копии.

Вызов по указателю

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

Эта способность отражать изменения может возвращать более одного значения функцией.

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

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

Вызов функции по указателю

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

Пример:

С++

// C++ program to implement
// pass-by-reference with pointers
#include <iostream>
using namespace std;
 
void f(int *x) 
{
  *x = *x - 1;
}
 
// Driver code
int main() 
{
  int a = 5;
  cout << a << endl;
  f(&a);
  cout << a << endl;
}

Выход

5

4

Объяснение: Во-первых, функция определяется с типом возвращаемых данных void и принимает значения в виде указателей (что обозначается знаком звездочки * в формальных параметрах). Функция уменьшает значение своего формального параметра на 1. После чего внутри основной функции целочисленная переменная с именем ’a’ инициализируется значением 5. Затем это значение отображается. Вызывается функция, и в качестве аргумента передается адрес переменной.
Внутри функции значение переменной-указателя уменьшается на 1. При выходе из функции снова отображается значение переменной, которое оказывается на 1 меньше исходного значения.

Читайте также:  Как освоить валидаторы Pydantic?
Оцените статью
bestprogrammer.ru
Добавить комментарий