- •6 Глава 1
- •12 Глава 1
- •14 Глава 1
- •16 Глава 1
- •18 Глава 1
- •20 Глава 1
- •22 Глава 1
- •24 Глава 1
- •26 Глава 1
- •31 Глава 1
- •34 Глава 2
- •36 Глава 2
- •Puc. 2.4. Дополнительные опции консольного приложения Win32
- •38 Глава 2
- •40 Глава 2
- •42 Глава 2
- •44 Глава 2
- •48 Глава 2
- •50 Глава 2
- •52 Глава 2
- •54 Глава 2
- •56 Глава 2
- •58 Глава 2
- •60 Глава 2
- •62 Глава 2
- •64 Глава 2
- •66 Глава 2
- •68 Глава 2
- •70 Глава 2
- •74 Глава 2
- •76 Глава 2
- •79 Глава 2
- •82 Глава 2
- •84 Глава 2
- •86 Глава 2
- •88 Глава 2
- •92 Глава 2
- •94 Глава 2
- •96 Глава 2
- •98 Глава 2
- •103 Глава 2
- •105 Глава 2
- •107 Глава 2
- •110 Глава 2
- •115 Глава 3
- •119 Глава 3
- •121 Глава 3
- •123 Глава 3
- •125 Глава 3
- •129 Глава 3
- •131 Глава 3
- •133 Глава 3
- •139 Глава 3
- •141 Глава 3
- •143 Глава 3
- •145 Глава 3
- •148 Глава 3
- •150 Глава 3
- •155 Глава 3
- •165 Глава 4
- •168 Глава 4
- •170 Глава 4
- •173 Глава 4
- •175 Глава 4
- •178 Глава 4
- •184 Глава 4
- •186 Глава 4
- •188 Глава 4
- •190 Глава 4
- •192 Глава 4
- •194 Глава 4
- •198 Глава 4
- •201 Глава 5
- •203 Глава 5
- •205 Глава 5
- •207 Глава 5
- •213 Глава 5
- •217 Глава 5
- •219 Глава 5
- •221 Глава 5
- •223 Глава 5
- •225 Глава 5
- •227 Глава 5
- •232 Глава 5
- •234 Глава 5
- •236 Глава 5
165 Глава 4
Вы можете также опустить размер массива числового типа, если указываете спи- сок значений инициализации. Количество элементов в массиве определяется количе- ством указанных инициирующих значений. Например, объявление массива:
определяет массив из трех элементов с начальными значениями 2, 3 и 4.
Символьные массивы и обработка строк
Массив типа char называется символьным массивом и обычно используется для хранения символьных строк. Символьная строка — это последовательность символов, дополненная специальным символом-ограничителем, указывающим конец строки. Ограничивающий строку символ записывается управляющей последовательностью ' \01, и иногда его называют нулевым символом, поскольку он представлен байтом, в котором все биты равны 0. Строки, организованные подобным образом, часто назы- вают строками в стиле С, поскольку такое определение строк впервые было представ- лено в языке С, на основе которого Бьерн Страуструп разработал язык С++. Это не единственное представление строк, которое вы можете использовать; позднее в этой книге вы познакомитесь и с другими. В частности, программы C++/CLI используют другое представление строк, а библиотека MFC определяет класс С St ring для пред- ставления строк.
Представление строки в стиле С в памяти показано на рис. 4.2.
На рис. 4.2 можно видеть, как выглядит строка в памяти, и показана форма объяв- ления строки, которую мы вскоре рассмотрим.
Каждый символ в строке занимает один байт, поэтому вместе с ограничивающим нулевым символом строке необходимо количество байт, на единицу превышающее количество симво- лов в ней.
Вы можете объявить символьный массив и инициализировать его строчным лите- ралом, например:
Обратите внимание, что ограничивающий символ '\0' добавляется компилято- ром автоматически. Если вы включите его в строчный литерал явно, то у вас будет два нулевых символа. Однако вы должны учитывать место для нулевого символа, ког- да определяете необходимое количество элементов для символьного массива.
Вы можете позволить компилятору определить длину инициализированного мас- сива самостоятельно, как вы видели на рис. 4.1. Вот другой пример:
Массивы,
строки
и
указатели
Поскольку размер не указан, компилятор выделяет пространство, достаточное для размещения инициализирующей строки, плюс ограничивающий нулевой символ. В данном случае он выделит 14 элементов для массива president. Конечно, если вы хотите использовать данный массив позднее для хранения другой строки, ее длина (включая нулевой символ-ограничитель) не должна превышать 14 байт. В общем слу- чае на вас ложится ответственность обеспечить достаточный размер массива, чтобы в него поместилась любая строка, которую вы в последствии захотите в нее поместить.
Строковый ввод
Заголовочный файл <iostream> содержит определения множества функций для чтения символов с клавиатуры. Одну их них мы рассмотрим здесь. Это — функция get line (), которая читает последовательность вводимых с клавиатуры символов и помещает ее в символьный массив в виде строки с ограничивающим нулем \0. Обычно вы будете использовать функцию getline () в операторах вроде следующего:
В этом фрагменте сначала объявляется массив char размером в МАХ элементов, а затем в него читается строка из cin с помощью функции getline (). Источник данных — cin — записывается так, как показано, с точкой, отделяющей его от име- ни функции. Что именно означают аргументы функции getline (), можно видеть на рис. 4.3.
Поскольку последний аргумент, переданный функции getline () — это ' \п' (сим- вол новой строки), а второй аргумент — МАХ, символы читаются из cin до тех пор, пока не будут прочитан символ '\n', или когда будет прочитано МАХ-1 символов — в зависимости от того, что произойдет раньше. Максимальное количество прочитан- ных символов равно МАХ-1, чтобы позволить дописать символ-ограничитель '\0' к последовательности символов, сохраняемых в массиве. Символ '\n' генерируется, когда вы нажимаете клавишу <Enter> на клавиатуре, а потому это — наиболее удобный символ для завершения ввода. Однако вы можете указать какой-то другой символ в качестве признака завершения ввода, изменив последний аргумент. Символ '\n' не сохраняется во входном массиве name, но как уже было сказано, в конец введенной строки, помещенной в массив, добавляется '\0'.