Читать «Полный справочник по С++» онлайн - страница 18

Герберт Шилдт

Локальную переменную можно проинипиализировать неким значением. Оно будет присваиваться переменной каждый раз при входе в блок. Рассмотрим в качестве примера программу, которая десять раз выводит на печать число 10.

#include <stdio.h> void f(void); int main(void)

{

int i ;

for(i=0; i<10; i++) f();

return 0;

void f(void)

{

int j = 10;

printf("%d ", j);

j++; /* Этот оператор не имеет долговременного эффекта. */

}

Формальные параметры

Если функция имеет аргументы, следует объявить переменные, которые будут принимать их значения. Эти переменные называются формальными параметрами (formal parameters). Внутри функции они ничем не отличаются от других локальных переменных. Как показано в приведенном ниже фрагменте программы, объявление таких переменных должно размещаться сразу после имени функции и заключаться в скобки.

/* Функция возвращает 1, если символ с является частью строки s; в противном случае она возвращает 0 */ int is_in(char *s, char с)

{

while(*s)

if(*s==c) return 1;

else s++;

return 0;

Функция is_in() имеет два параметра: вис. Она возвращает 1, если символ с является частью строки s, в противном случае функция возвращает 0.

Тип формальных параметров задается при их объявлении. После этого их можно использовать как обычные локальные переменные. Учтите, что, как и локальные переменные, формальные параметры являются динамическими и разрушаются при выходе из функции.

Формальные параметры можно использовать в любых конструкциях и выражениях. Несмотря на то что свои значения они получают от аргументов, передаваемых извне функции, во всем остальном они ничем не отличаются от локальных переменных.

Глобальные переменные

В отличие от локальных, глобальные переменные (global variables) доступны из любой части программы и могут быть использованы где угодно. Кроме того, они сохраняют свои значения на всем протяжении выполнения программы. Объявления глобальных переменных должны размешаться вне всех функций. Эти переменные можно использовать в любом выражении, в каком бы блоке оно не находилось.

В приведенном ниже фрагменте программы переменная count объявлена вне всех функций. Несмотря на то что ее объявление расположено до функции main(), эту переменную можно было бы с таким же успехом объявить в другом месте, но вне функций и до ее первого использования. И все же лучше всего размешать объявления глобальных переменных в самом начале программы.

#include <stdio.h>

int count; /* Переменная count является глобальной */

void fund (void); void func2(void);

int main(void)

{

count = 100;

funcl();

return 0; void fund (void)

{

int temp;

temp = count;

func2();

printf("count = %d”, count); /* Выведет число 100. */

}

void func2(void)

{

int count;

for(count=l; count<10; count++)

putchar('.');

Присмотритесь к этой программе повнимательнее. Заметьте, что, хотя ни функция main(), ни функция funclO не содержат объявления переменной count, обе эти функции успешно ее используют. Однако внутри функции func2() объявлена локальная переменная count. Когда функция func2 () ссылается на переменную count, она использует лишь локальную переменную, а не глобальную. Если глобальная и локальная переменные имеют одинаковые имена, то все ссылки на имя переменной внутри блока будут относиться к локальной переменной и не влиять на ее глобальную тезку. Возможно, это удобно, однако об этой особенности легко забыть, и тогда действия программы могут стать непредсказуемыми.