Может возникнуть соблазн применения везде векторов 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[])


<< назад вперед >>