Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
programmirovanie_okonchat.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
153.81 Кб
Скачать

33Внешние статические объекты (static).

    Областью действия статического внешнего объекта является модуль, в котором описан данный объект. При этом где-либо во внешних описаниях (т.е. вне определения функций) должно быть расположено определение внешнего статического объекта в виде:

 static <спецификация_типа> <спецификация_данных>;

    На основании определения "под" объект отводится память и может быть произведена инициализация. Статические переменные можно инициализировать только константными выражениями и указателями на ранее описанные объекты.

    По умолчанию (если не задана инициализация) статические объекты получают нулевые начальные значения.

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

    Пример 1. #include <iostream.h>

void main ()

{

static int i;

/* ---------------- */

cout << "i = " << i << endl;

}

    Результат работы программы:

i = 0

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

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

    Константы являются объектами статического класса памяти.

    Функция может быть определена как статический внешний объект. В этом случае она будет доступной в любой точке данного модуля и не доступной за пределами модуля.

    Не объявляйте локальные переменные как static!

34 Строки

       Строки предназначены для ввода, обработки и вывода символьной информации.

    Строковая константа - это последовательность из нуля или более символов, заключенных в кавычки. Кавычки не являются частью строковой константы, а служат только для ее ограничения.

    Строки представляются в виде массива элементов типа char. Это означает, что символы строки можно представить расположенными в соседних ячейках памяти - по одному символу в ячейке. Но массив символов - не всегда строка!

    В качестве примера рассмотрим следующую строку: "Символьная строка". Кавычки не являются частью строки. Они вводятся для того, чтобы отметить ее начало и конец, то есть играют ту же роль, что и апострофы в случае одиночного символа (каждая ячейка - 1 байт).

Рис.1. Схема размещения в памяти элементов строки

    Необходимо отметить, что на рисунке последним элементом массива является символ '\0'. Это нуль-символ: в языке C++ он используется для того, чтобы отмечать конец строки. Нуль-символ - не есть цифра 0; он не выводится на печать и в таблице кодов ASCII имеет номер 0. Наличие нуль-символа означает, что количество ячеек массива должно быть по крайней мере на одну больше, чем количество символов, которые необходимо размещать в памяти.

    Не следует путать символьную константу со строкой, содержащей один символ: 'Х' - это не то же самое, что "Х". В первом случае - это отдельный символ. Во втором случае - это строка, состоящая из одного символа (буквы Х) и символа конца строки '\0'.

    Для представления внутри строки символа "кавычка", перед ней нужно располагать символ '\'. Точно так же можно получить представление и других управляющих символов внутри строки. Например, '\' и непосредственно следующий за ним символ перевода строки '\n' игнорируются. Это дает возможность представлять строки, не помещающиеся на одной строчке исходного текста программы. Апостроф внутри строки представляется обычным образом.

    Пример. #include <iostream.h>

void main ()

{

int c=0;

while (c!=-1)

{

cout << "Введи число от 0 до 9 (-1 - выход): ";

cin >> c;

switch (c)

{

case 0: cout << "this is a string\n"; break;

case 1: cout << " \n"; break;

case 2: cout << "В строке - русские буквы\n";

break;

case 3: cout << "Апостроф выводится стандартно: '\n";

break;

case 4: cout << "Кавычка:\"\n"; break;

case 5: cout << "\255\\\n: перед двоеточием 3 символа\n";

break;

case 6: cout << "Строка, расположенная на двух стр\

оках текста\n";

break;

case 7: cout << "Вывод табулятора:\\t\n";

break;

case 8: cout << "Вывод перевода каретки:\\r\n";

break;

case 9: cout << "Вывод возврата на символ:\\b\n";

break;

}

}

}

Инициализация строк

    Здесь мы рассмотрим правила инициализации строк.

    Вначале приведем пример инициализации строки.

    Пример 1. #include <iostream.h>

int n=5;

/* Инициализация строки внешнего класса памяти.

*/

char line[5] = { 'Д','о','м','!','\0' };

void main ()

{

cout << "Получили слово: ";

for (int i=0; i<n; i++)

cout << line[i];

}

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

    Пример 2. #include <iostream.h>

int n=5;

char line[] = "Дом!"; /* Инициализация символьного мас- */

/* сива внешнего класса памяти. */

void main ()

{

cout << "Получили слово: ";

for (int i=0; i<n; i++)

cout << line[i];

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]