Наличие в конце строк завершающего нуля часто помогает упростить различные операции. Так, приводимая ниже программа преобразует строчные буквы строки в прописные:
// Преобразование строчных символов строки в прописные.
Приведенная программа использует библиотечную функцию toupper(), которая возвращает прописной эквивалент своего символьного аргумента, чем и осуществляется преобразование всех символов строки. Функция toupper( ) использует заголовок <cctype>.
Обратите внимание на то, что в качестве условия для цикла выступает просто массив, индексируемый управляющей переменной. Здесь используется то обстоятельство, что любое ненулевое значение является истинным. Вспомним, что все коды символов не равны 0, но любая строка завершается нулем. Поэтому наш цикл и выполняется до тех пор, пока он не встретится с нулевым символом, когда str[i] оказывается равным 0. Поскольку завершающий ноль отмечает конец строки, цикл останавливается в точности там, где и требуется. В профессионально написанных С++ - программах вы увидите массу примеров использования завершающего строку нуля аналогичным образом.
В С++ предусмотрены средства инициализации массивов. Общая форма инициализации массива сходна с аналогичным действием для других переменных, как это показано ниже:
тип имя-массива[размер] = {список-значений};
Здесь список-значений представляет собой список значений, разделенных запятыми и совместимых по типу с базовым типом массива. Первое значение помещается в первый элемент массива, второе — во второй элемент и т. д. Обратите внимание на то, что точка с запятой ставится после закрывающей скобки }.
В следующем примере массив из десяти целочисленных элементов инициализируется числами от 1 до 10:
int i[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
В результате компиляции этого предложения i[0] будет иметь значение 1, a i[9] - 10.
Символьные массивы, предназначенные для хранения строк, допускают упрощенную инициализацию в такой форме:
char имя-массива[размер] = "строка";
Например, следующий программный фрагмент инициализирует строкой "С++":
char str [4] = "С++" ;
Тот же результат можно было получить и иначе:
char str [4] = {'С’, '+', '+', '\0'};
Поскольку строки в С++ заканчиваются нулем, вы должны объявить массив достаточно большой длины, предусмотрев место для этого нуля. Именно поэтому массив str имеет в этих примерах длину 4 символа, хотя в строке "С++" их только три. Если для инициализации массива используется строковая константа, компилятор автоматически записывает в массив завершающий ноль.
Многомерные массивы инициализируются так же, как и одномерные. Например, следующий фрагмент инициализирует массив числами от 1 до 10 и их квадратами:
int sqrs[10][2] = {
1,1,
2,4,
3,9,
4,16,
5,25,
6,36,
7,49,
8,64,
9,81,
10,100
};
Инициализируя многомерный массив, вы можете добавить фигурные скобки вокруг инициализаторов каждого измерения. Это действие носит название субагрегатной группировки. Воспользовавшись этим приемом, объявление массива из предыдущего примера можно записать таким образом:
int sqrs[10][2] = {
{1, 1},
{2, 4},
{3, 9},
{4,16},
{5,25},
{6,36},
{7,49},
{8,64},
{9,81},
{10, 100}
};
Если, используя субагрегатную группировку, вы не укажете достаточное количество инициализаторов для данной группы, оставшимся членам будут автоматически присвоены нулевые значения.