12. C/C++ Передача значения в функцию по ссылке/указателю

Передача значения в функцию по ссылке/указателю

Ранее, мы писали функции например:
int Sum(int a, int b) {return (a+b);}

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

Напишем функцию, которая прибавит к передаваемому значению число 2 (т.е. изменит аргумент фунции)

void Add_2(int a) 
{
   a=a+2;
}

Казалось бы – функция должна работать, но нет.

Если мы напишем следующий код:

int Value=0;
Add_2(Value);
cout<< Value <<endl; //просто вывод на консоль

То в консоль выведется 0

В чем причина? – в функцию аргументы передаются по значению (т.е. копируется их значение)
и написав Add_2(Value); это равносильно Add_2(0); и при этом переменная Value (ее адрес не фигурирует).

Для исправления ситуации используют передачу по ссылке

void Add_2(int& a) 
{
  a=a+2;
}

Или по указателю

void Add_2(int* a) 
{
  *a=*a+2;
}

Для указателя в этом случае вызываем функцию Add_2(&Value);

Повторюсь, что название массива является указателем на его элемент с индексом [0].

Leave a Reply

Your email address will not be published. Required fields are marked *