Передача параметров в функции по указателю (по ссылке)
Рассмотрим, как можно добиться того, чтобы функция могла изменить значение параметра, и это изменение сохранялось бы после выхода из функции. Изменим немного представленный пример.
#include <stdio.h>
void MyFun(int* pa)
{
*pa=100;
}
void main()
{
int a=10;
MyFun(&a);
printf("a=%d", a); // Будет напечатано a=100
}
В этом примере значение переменной a будет изменено, так как в этом случае в стек помещается не копия переменной a, а адрес переменной, при выполнении операции обращение по адресу внутри функции, новое значение будет записано по адресу исходной переменной а и переменная будет изменена. Данный процесс демонстрируется на рисунке.
Оперативная память |
….. ….. ….. Стек |
Переменная a=10, 100 |
pa - адрес a |
*pa=100 |
Такой механизм передача параметров называется передача параметров по указателю.
Таким образом можно сделать вывод, для того чтобы функция могла изменить значение параметра, параметр должен передаваться по указателю, т.е. в функцию необходимо передавать адрес исходного объекта (переменной).
Примечание. Поэтому в стандартной функции ввода scanf и некоторых других функциях при вызове передается адрес переменной (используется операция &).
В языке Си++ появился новый тип – ссылки. В некоторых случаях их удобно использовать вместо указателей в качестве параметров функции, так как ссылка, по сути, является указателем, но к ней не надо применять операцию обращения по адресу («*»). В представленном ниже примере функция также меняет значение параметра.
#include <stdio.h>
void MyFun(int& la) // Параметр функции - ссылка
{
la=100; // Не нужно применять операцию – обращение по адресу
}
void main()
{
int a=10;
MyFun(a); // При вызове не нужно получать адрес
printf("a=%d", a); // Будет напечатано a=100
}
Дата добавления: 2015-08-14; просмотров: 803;