Обращение к элементам массива.

Важно помнить, что C++ всегда использует 0 для индекса первого элемента массива, а индекс последнего элемента на единицу меньше размера массива.

Массив позволяет программам хранить несколько значений внутри одной и той же переменной. Для обращения к определенному значению внутри массива программы используют индекс. Говоря кратко, значение индекса указывает требуемый элемент массива. Все массивы C++ начинаются с элемента с индексом 0. Например, следующий оператор присваивает значение 100 первому элементу массива с именем scores:

scores[0] = 100;

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

int scores[100];

В данном случае массив представляет собой элементы от scores[0] до scores[99].

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

int values[5] = { 100, 200, 300, 400, 500};

Подобным образом следующее объявление инициализирует массив с плавающей точкой:

float salaries[3] = { 25000.00. 35000.00, 50000.00};

Если вы не указываете первоначальное значение для какого-либо элемента массива, большинство компиляторов C++ будут инициализировать такой элемент нулем. Например, следующее объявление инициализирует первые три из пяти элементов массива:

int values[5] = { 100, 200, 300};

Программа не инициализирует элементы values[3] и values[4]. В зависимости от вашего компилятора, эти элементы могут содержать значение 0. Если вы не указываете размер массива, который вы инициализируете при объявлении, C++ распределит достаточно памяти, чтобы вместить все определяемые элементы. Например, следующее объявление создает массив, способный хранить четыре целочисленных значения:

int numbers[] = { 1, 2, 3, 4 };

Строка как массив символов

Строка есть последовательность символов, заключенная в двойные кавычки: "...". Строка имеет тип "массив символов" и класс памяти static, она инициализируется заданными символами. Все строки, даже если они записаны одинаково, различны. Компилятор располагает в конце каждой строки нулевой (пустой) байт \0 с тем, чтобы сканируюшая строку программа могла найти ее конец.

Массив char можно инициализировать строкой. Последовательные символы строки инициализируют члены массива. Например:

char msg[] = "Syntax error on line";

демонстрирует массив символов, члены которого инициализированы строкой. Обратите внимание, что sizeof(msg)==25.

Любая символьная константа, например "ОЙ У ПОЛИ КРИНИЧКА", представляет собой массив символов. Во внутреннем представлении компилятор завершает такой массив символом "\0", так что любая программа может по нему легко обнаружить конец строки. Поэтому строка занимает в памяти на один символ больше, чем записано между двойными кавычками. Нумерация элементов массива начинается с нуля. Надо помнить, что, например 'T' - это символ(буква), а ' T ' - это строка, состоящая из двух символов: 'T' и '\0'. Отсюда следует, что пустых строк не бывает.
Строка в языке Си - это разновидность константы и ее можно присваивать некоторой переменной, представляющей массив символов:

char str[]="ТЕКСТ";

Такая запись и короче и понятнее, чем общепринятая для начальной инициализации массивов:

char str[]={'Т','Е','К','С','Т',};

Если длина строки в квадратных скобках опущена, то она определяется автоматически, по количеству присваиваемых символов. В приведенном выше примере она равна шести.
Запишем программу (пример ), в которой функция main формирует строку по указанному выше правилу и вызывает функцию length,которая в качестве аргумента получает начальный адрес этой строки и вычисляет ее длину(без учета завершающего символа). Эта функция представляет собой самостоятельный интерес и будет использована нами а дальнейшем как библиотечная.

Пример

/*длина строки*/ void length(s); char s[]; { int l=0; while(s[l]!='\0') i++; return(i); } #include <iostream.h> main() { static char str[]="ОЙ У ПОЛИ КРИНИЧКА"; cout<<length(str); }

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

strlen(st) возвращает длину строки st в байтах, не считая последнего завершающего байта

strcmp(st1,st2) сравнивает две строки по алфавиту. Если строка st1 стоит раньше по алфавиту чем st2, то результат функции меньше нуля, если позже – больше нуля, если равны – равна нуля. Функция целочисленная.

strcpy(k,st) копирует одну строку st по адресу k, включая нулевой байт. В качестве результата функция возвращает адрес первой строки.

strcat(k,st) –присоединяет вторую строку к концу первой, включая завершающий нулевой байт. На его место в первой строке переписывается первый символ второй строки. В качестве результата функция возвращает адрес первой строки, где по адресу k получается склеенная строка.

Наши рекомендации