Шаг 55.
Microsoft Visual C++ 2010. Язык С/С++.
Указатели и структуры данных. Указатели и аргументы функций

    На этом шаге мы рассмотрим передачу параметров в функцию по ссылке.

    Аргументы в функцию можно помещать, либо передавая их значения, либо - ссылки на эти значения (т. е. адреса). В последнем случае значения переданных по ссылке переменных могут быть изменены в теле функции. Примером этого может служить приведенная ниже программа.

// 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;, это и есть работа с адресами.

    На следующем шаге мы рассмотрим указатели, содержащие адреса символов, и функции, возвращающие адреса.




Предыдущий шаг Содержание Следующий шаг