На этом шаге мы рассмотрим передачу параметров в функцию по ссылке.
Аргументы в функцию можно помещать, либо передавая их значения, либо - ссылки на эти значения (т. е. адреса). В последнем случае значения переданных по ссылке переменных могут быть изменены в теле функции. Примером этого может служить приведенная ниже программа.
// PtrArgFunc.cpp: главный файл проекта. #include "stdafx.h" #include <clocale> //обязательно для функции setlocale() #include <stdio.h> #include <conio.h> using namespace System; // функция, меняющая местами значения переменных a и b void f (int *a, int *b) //параметры - указатели { int tmp = *a; *a = *b; *b = tmp; } void main() { setlocale(LC_ALL,"Russian"); //функция setlocale() с аргументами //для корректного вывода кириллицы int c = 12; int d = 120; printf("Значения c и d до изменения: c = %d, d = %d\n", c,d); f(&c,&d); //передача адресов переменных printf("Значения c и d после изменения: c = %d, d = %d\n", c,d); _getch(); }
Результат работы приложения изображен на рисунке 1.
Рис.1. Результат работы приложения
В этой функции аргументы объявлены как указатели, следовательно, при обращении к такой функции ей надо передать адреса переменных, а не их значения. А поскольку мы передали адреса переменных, то в теле функции по этим адресам можно изменять содержимое самих переменных.
Например, когда мы пишем *а=*b;, это и есть работа с адресами.
На следующем шаге мы рассмотрим указатели, содержащие адреса символов, и функции, возвращающие адреса.