Различные области видимости переменной х. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. #include<iostream. h> int x = 20; //х объявлена, как глобальная void Count. Loops(int); int main() { int x = 40; //х объявлена, как локальная для main() int i = 0; cout << "В главной программе х = " << x; bool done = false; while (!done) { int x; //х объявлена, как локальная для while cout << "n Задайте число (-1 для выхода): "; cin >> х; if (x != -1) { cout << "n Внутри цикла While x = " << x; Count. Loops (++i); } else done = true; } cout « "n Глобальное x = " « : : x; cout << "n. Press any key to continue. . . "; cin >> i; return 0; } void Count. Loops (int x) // х объявлена, как параметр функции cout << ", цикл While выполнился " << x << " раз"; } В этом примере переменная х объявлена 4 раза: -в строке 2 вне функции main(), -в строке 6 внутри main(), -в строке 12 внутри цикла while -и в функции Count. Loops() (строка 26). Если программист случайно объявляет переменную более одного раза, компилятор выдает сообщение об ошибке Multiple declaration for 'x' (Многократное объявление x) и компиляция прекращается. Тем не менее, эта программа компилируется и запускается вполне нормально. Дело в том, что переменные х из примера имеют различные области видимости. Переменная х в строке 12 объявлена внутри тела цикла while и является локальной по отношению к этому блоку. В результате она не существует вне цикла. Аналогично переменная х, объявленная в строке 26, локальна по отношению к функции Count. Loops () т. к. она содержится в списке параметров функции и не существует вне этой функции. Переменная х, объявленная в строке 6 внутри функции main(), локальна по отношению к функции main (> , а также доступна из любого внутреннего блока, кроме цикла while, так как внутри цикла while существует переменная с таким же именем х, имеющая меньшую область видимости. В строке 2 переменная х объявлена вне всех функций. Она является глобальной переменной и имеет глобальную область видимости. Это означает, что переменная х доступна всюду в программе: внутри функции main (), внутри цикла while и внутри функции Count. Loops(). Но, как было упомянуто раньше, локальная переменная перекрывает глобальную. Что же делать, если нужно обратиться к глобальной переменной х из функции main() ? Для этого нужно использовать оператор разрешения видимости (scope resolution operator): : (строка 21): cout << "n Global x = " << : : x; Оператор разрешения видимости сообщает компилятору, что нужно взять значение глобальной переменной х, а не локальной.
Области видимости переменных, объявленных внутри операторов цикла for(). • следующий код приведет к ошибке компиляции: void main () { int array[10]; int index; for (int i=0; i<10; i++){if(array[i]==40) break; ) index =i; . . . } Ошибка возникнет вследствие того, что переменная i видима только внутри блока, соответствующего циклу for(). • Чтобы исправить положение, нужно объявить i вне цикла for(). void maim () { int array[10]; int index, i; for (i=0; i<10; i++){if(array[i]==40) break; ) index =i; . . . }
Массивы в качестве параметров функций Массивы могут быть параметрами функций и функции в качестве результата могут возвращать указатель на массив.
Одномерные массивы • При использовании массива в качестве параметра функции нужно в теле функции определить количество элементов массива, который является аргументом при обращении к функции. • При работе со строками, т. е. с массивами типа char[], проблема решается просто, поскольку последний элемент строки имеет значение ‘ ’. Поэтому при обработке массива-аргумента каждый его элемент анализируется на наличие символа конца строки.
Строки как параметры функций. Требуется составить программу, содержащую функцию, которая подсчитывает число символов в строке. Если массив не является символьной строкой, то при #include <iostream. h>, использовании его в качестве int dl(char[]); // прототип функции dl параметра функции, необходимо либо void main() использовать массив с заранее { известным числом элементов, char р[]="кафедра"; либо передавать размер cout << "n Длина строки равна: " << dl(p); массива с помощью } дополнительного параметра. Следующие два примера int dl(char c[]) иллюстрируют эти { возможности. int i; for(i=0; ; i++) if (c[i]= ='