    48:	int len = strlen(instr); 
    49:	if (width < len) 
    50:	   width = len; 
    51:	int wd2 =	(width - len) / 2; 
    52: 
    53:	int i; //	Индекс строки и	управляющая переменная для цикла for 
    54: 
    55:	for ( i = 0; i < wd2; i++) 
    56:	   outstr[i]	= IFill; 
    57:	for ( /*i= i*/; i < wd2 +	len; i++) 
    58:	   outstr[ij	= instr[i - wd2]	• 
    59:	for (/*i	= i*/; i < width;	i++) 
    60:	   outstr[i]	= rFill; 
    61:	outstr[i]	= 0; // Завершаем строку нулем 
    62:	} 

    В программе объявляется прототип функции Center() с тремя аргументами по умолчанию: 

    void Center(const char «instr, char *outstr, int width = 0,  char IFill = '-',  char rFill = '-'); 

    Первые два параметра — адреса входной и выходной строки. Входная строка 
объявлена с ключевым словом const для предохранения ее от изменения в теле 
функции. Последние три параметра определены со значениями по умолчанию, 
которые будут их инициализировать при пропуске соответствующих аргументов в 
операторе, в котором вызывается функция Center(). Как показано в программе, 
первый вызов функции должен быть только с двумя аргументами: 

    Center(instr,  outstr); 

    Другие аргументы будут значениями по умолчанию, определенными в прототипе 
функции. В других вызовах Center в примере указывается один или более 
аргументов, переопределяющих значения по умолчанию. Каждое выражение порождает 
различные выходные строки с отцентрированной и обрамленной различными 
символами заполнения выходной строкой. 

    Ссылки 

    В главе 9 вы узнали, как создавать указатели, являющиеся альтернативными 
способами доступа к другим переменным путем их адресации. В следующих строках 

    int i = 1234; 
    int *p = &i; 

объявляется целая переменная i, инициализированная значением 1234, и 
указатель на целое р, адресующий i. В соответствии с этими объявлениями 
следующие два оператора выводят значение i: 

    cout « "i == " « i « '\n'; 
    cout « "i == " « *p «'\n'; 

    Выражение *р указывает компилятору, что следует использовать значение, 
адресуемое р. 
    Использование указателей в качестве альтернативного способа доступа к 
переменным таит в себе опасность — если оператор изменил адрес, хранящийся в 
указателе, то этот указатель более не ссылается на то же значение. Если такое 
изменение было внесено непреднамеренно, результатом его может быть серьезная 
ошибка. Кроме того, использование указателей ведет к написанию программ, 
пестрящих символами-звездочками. 
    C++ предлагает альтернативу для более безопасного доступа к переменным 
через указатели. Объявив ссылочную переменную, вы создадите объект, который, 
как указатель, ссылается на другое значение, но, в отличие от указателя, 
постоянно привязан к своему alter ego ("второму я"). Ссылка на значение всегда 
ссылается на это значение.
    Ссылки, в основном, используются в качестве переменных, параметров функций 
и результатов функций. 

    Ссылки в качестве переменных 

    Как переменная ссылка ссылается на другое значение. Вероятно, на практике 
вы не захотите использовать ссылки таким образом, но приведенная ниже 
программа демонстрирует работу со ссылками. Скомпилируйте и запустите листинг 
12.15 как Easy Win- или DOS-приложение. В программе приводятся четыре способа 
адресации и вывода целого значения. 

    Листинг 12.15. REFVAR.CPP (демонстрация ссылочных переменных) 

    1:     #include <iostream.h> 
    2: 
    3:     main() 
    

    Глава 12. Введение в С++     297 
