Может возникнуть соблазн применения везде векторов std:: vector<T> или QVec-tc г<Т> вместо встроенных массивов. Тем не менее полезно иметь представление о работе встроенных массивов, потому что рано или поздно вам может потребоваться очень быстрый программный код или придется использовать существующие библиотеки С.
Символьные строки
Основной способ представления символьных строк в С++ заключается в применении массива символов char, завершаемого нулевым байтом ('\0'). Следующие четыре функции демонстрируют работу таких строк:
void hello1() {
const char str[] = {
'H*, 'e', '1', '1', *o\ ' ', 'w*. 'о', 'r\ '1', 'd', "\0"
};
cout « str « endl;
void hello2()
const char str[] = "Hello world!"; cout « str « endl;
void hello3()
cout « "Hello world!" « endl;
void hello4()
const char *str = "Hello world!"; cout « str « endl;
В первой функции строка объявляется как массив и инициализируется посимвольно. Обратите внимание на символ в конце '\0\ обозначающий конец строки. Вторая функция имеет аналогичное определение массива, но на этот раз для инициализации массива используется строковый литерал. В С++ строковые литералы -это просто массивы символов const char, завершающиеся символом '\0', который не указывается в литерале. В третьей функции строковый литерал используется непосредственно без придания ему имени. После перевода на инструкции машинного языка она будет идентична первым двум функциям.
Четвертая функция немного отличается, поскольку создает не только массив (без имени), но и переменную-указатель с именем str, в которой хранится адрес первого элемента массива. Несмотря на это, семантика данной функции идентична семантике предыдущих трех функций, и оптимизирующий компилятор удалит лишнюю переменную str.
Функции, принимающие в качестве аргументов строки С++, обычно объявляют их как char * или const char *. Ниже приводится короткая программа, иллюстрирующая оба подхода:
#include <cctype> #include <iostream>
using namespace std;
void makeUppercase(char *str)
for (int i = 0; str[i] != ДО'; ++i) str[i] = toupper(str[i]);
void writeLine(const char *str) cout « str « endl;
int main(int argc, char *argv[])
<< назад вперед >>