C ++ Вызов по адресу и вызов по ссылке

C Call Address



C ++ - гибкий язык программирования общего назначения. Первоначально он был создан Бьярне Страуструп, датский ученый-компьютерщик, еще в 1985 году. C ++ поддерживает методы передачи с тремя параметрами, то есть вызов по значению, вызов по адресу и вызов по ссылке. В этой статье мы поговорим о механизме вызова по адресу и вызова по ссылке.

Что такое функция?

Прежде чем мы перейдем к актуальной теме, нам нужно понять, что это за функция в C ++. Многие из вас, возможно, уже знакомы с функциями.







Функция - это, по сути, фрагмент кода, который можно использовать для выполнения определенной задачи. Функция в основном используется для уменьшения повторяющегося кода в программе на C ++. Он принимает входные данные как параметры и возвращает выходные данные как возвращаемое значение. Если мы определим функцию один раз, мы сможем вызывать / использовать ее несколько раз в более поздней части нашей программы. Таким образом мы сохраняем в программе много повторяющегося кода.



Каждая программа на C ++ должна иметь функцию main (). Функция main () - это точка входа в программу на C ++. Помимо функции main (), программист может определять любое количество функций.



Вот синтаксис определения функции:





Return_type Имя_функции(Список входных параметров)

Функция в C ++ может принимать 0 или более входных параметров, тогда как она может возвращать только одно возвращаемое значение.

Что такое адрес?

В C ++ есть два типа переменных (аналогично языку C) - переменная данных и переменная адреса. Адресная переменная используется для хранения адреса другой переменной данных. Например, рассмотрим следующий фрагмент кода:



intязнак равно 100;
int *ptrзнак равно &я;

Здесь первая инструкция сообщает нам, что переменная i является переменной данных, и в ней хранится значение 100. Во втором заявлении мы объявляем переменную-указатель, то есть ptr, и инициализируем ее адресом переменной i.

Что такое ссылка?

Ссылка - еще одна мощная функция языка C ++. Рассмотрим следующий фрагмент кода:

intкзнак равно 200;
int &рзнак равнок;

В этом примере мы объявили целое число, то есть a, а затем объявили ссылочную переменную r, которая инициализируется значением a. Итак, ссылочная переменная - не что иное, как псевдоним другой переменной.

Методы передачи параметров:

В языке C ++ существует три типа методов передачи параметров:

  1. Вызов по значению / Передача по значению
  2. Звонок по адресу / Передача по адресу
  3. Звоните по ссылке / Передайте по ссылке

В этой статье мы обсуждаем - «Звонок по адресу» и «Звонок по ссылке».

Что такое вызов по адресу / передача по адресу?

В случае метода «Вызов по адресу» / «Передача по адресу» аргументы функции передаются как адрес. Вызывающая функция передает адрес параметров. Переменные-указатели используются в определении функции. С помощью метода вызова по адресу функция может получить доступ к фактическим параметрам и изменить их. В следующем разделе этой статьи мы увидим пример метода «Вызов по адресу».

Что такое вызов по ссылке / передача по ссылке?

В методе «Вызов по ссылке» / «Передача по ссылке» параметры функции передаются в виде ссылки. Внутри определения функции доступ к фактическим параметрам осуществляется с помощью ссылочной переменной.

Примеры:

Теперь, когда мы понимаем концепцию методов передачи параметров, мы увидим несколько примеров программ для понимания механизма передачи параметров в C ++:

  1. Пример-1 - Звонок по адресу (1)
  2. Пример-2 - Звонок по адресу (2)
  3. Пример-3 - Вызов по ссылке (1)
  4. Пример-4 - Вызов по ссылке (2)

Первые два примера приведены для объяснения того, как работает метод «Вызов по адресу» в C ++. Последние два примера призваны объяснить концепцию вызова по ссылке.

Пример-1 - Звонок по адресу (1)

В этом примере мы собираемся продемонстрировать механизм вызова по адресу. Из функции main () мы вызываем функцию hello () и передаем адрес переменной. В определении функции мы получаем адрес var в переменной-указателе, то есть p. Внутри функции hello значение var меняется на 200 с помощью указателя. Следовательно, значение var меняется на 200 внутри функции main () после вызова функции hello ().

#включают
с использованием пространство именчасы;

пустотаПривет(int *п)
{
Стоимость <<конец<< 'Внутри функции hello ():' <<конец;
Стоимость << 'Значение * p =' << *п<<конец;
*пзнак равно 200;
Стоимость << 'Значение * p =' << *п<<конец;
Стоимость << 'Выход из функции hello ().' <<конец;
}

intглавный()
{
intкудазнак равно 100;
Стоимость << 'Значение переменной внутри функции main () =' <<куда<<конец;

Привет(&куда);

Стоимость <<конец<< 'Значение переменной внутри функции main () =' <<куда<<конец;

возвращение 0;
}

Пример-2 - Звонок по адресу (2)

Это еще один пример вызова по адресному методу. В этом примере мы собираемся объяснить, как метод вызова по адресу может использоваться для решения реальной проблемы. Например, мы хотим написать функцию для обмена двумя переменными. Если мы используем механизм вызова по значению, чтобы поменять местами две переменные, фактические переменные не меняются местами в вызывающей функции. В таком сценарии можно использовать вызов по адресу. В этом примере мы передаем адрес как var_1 (& var_1), так и var_2 (& var_2) функции mySwap (). Внутри функции mySwap () мы меняем местами значения этих двух переменных с помощью указателей. Как вы можете видеть в выводе ниже, фактическое значение этих переменных заменяется в функции main () после выполнения функции mySwap ().

#включают
с использованием пространство именчасы;

пустотаmySwap(int *vptr_1,int *vptr_2)
{
inttemp_var;
temp_varзнак равно *vptr_1;
*vptr_1знак равно *vptr_2;
*vptr_2знак равноtemp_var;
}

intглавный()
{
intvar_1знак равно 100;
intvar_2знак равно 300;

Стоимость << 'Перед вызовом функции mySwap () значение var_1:' <<var_1<<конец;
Стоимость << 'Перед вызовом функции mySwap () значение var_2:' <<var_2<<конец<<конец;

Стоимость << «Вызов функции mySwap () - вызов по адресу». <<конец<<конец;
mySwap(&var_1,&var_2);

Стоимость << 'После вызова функции mySwap () значение var_1:' <<var_1<<конец;
Стоимость << 'После вызова функции mySwap () значение var_2:' <<var_2<<конец;

возвращение 0;
}

Пример-3 - Вызов по ссылке (1)

В этом примере мы собираемся продемонстрировать, как вызов по ссылке работает в C ++. В определении функции hello () значение принимается как ссылочная переменная (& p). С помощью ссылочной переменной (то есть p) мы можем изменить значение фактического параметра (var) внутри функции main ().

#включают
с использованием пространство именчасы;

пустотаПривет(int &п)
{
Стоимость <<конец<< 'Внутри функции hello ():' <<конец;
Стоимость << 'Значение p =' <<п<<конец;
пзнак равно 200;
Стоимость << 'Значение p =' <<п<<конец;
Стоимость << 'Выход из функции hello ().' <<конец;
}

intглавный()
{
intкудазнак равно 100;
Стоимость << 'Значение переменной внутри функции main () =' <<куда<<конец;

Привет(куда);

Стоимость <<конец<< 'Значение переменной внутри функции main () =' <<куда<<конец;

возвращение 0;
}

Пример-4 - Вызов по ссылке (2)

Это еще один пример вызова по ссылке. В этом примере мы собираемся продемонстрировать, как вызов по ссылке работает в C ++, на реальном примере. Функция mySwap () вызывается из функции main () со следующими параметрами - var_1 и var_2. Внутри функции mySwap () мы получаем параметры как ссылочные переменные.

#включают
с использованием пространство именчасы;

пустотаmySwap(int &vref_1,int &vref_2)
{
inttemp_var;
temp_varзнак равноvref_1;
vref_1знак равноvref_2;
vref_2знак равноtemp_var;
}

intглавный()
{
intvar_1знак равно 100;
intvar_2знак равно 300;

Стоимость << 'Перед вызовом функции mySwap () значение var_1:' <<var_1<<конец;
Стоимость << 'Перед вызовом функции mySwap () значение var_2:' <<var_2<<конец<<конец;

Стоимость << «Вызов функции mySwap () - вызов по ссылке». <<конец<<конец;
mySwap(var_1, var_2);

Стоимость << 'После вызова функции mySwap () значение var_1:' <<var_1<<конец;
Стоимость << 'После вызова функции mySwap () значение var_2:' <<var_2<<конец;

возвращение 0;
}

Заключение

Понимание методов передачи параметров в C ++ очень важно. Язык программирования C поддерживает только вызов по значению и вызов по адресу. Но C ++ поддерживает вызов по ссылке вместе с двумя предыдущими механизмами. В этой статье мы увидели несколько рабочих примеров, чтобы понять концепцию вызова по адресу и вызова по ссылке. Вызов по адресу - очень мощный и популярный метод во встроенных доменных приложениях.