В информационных задачах часто необходимо запомнить отдельно несколько символьных строк, связанных друг с другом одной темой (общностью).
Для хранения списка символьных строк используется двумерный массив размером n´s, где n – максимальное количество строк (студентов в группе, инструментов в наборе), s – максимальное количество символов в строке с учетом символа окончания строки ‘\0’.
Например,
char name[25][30];
Для хранения массива name в оперативной памяти будет отведено 750 байт непрерывного пространства для хранения 25 строк длиной не более 30 символов каждая (с учетом символа окончания строки).
Инициализация двумерного массива выполняется следующим образом:
char name[25][30] = {
{“Строка 1”},
{“Строка 2”},
:
:
{“Строка n”}
};
Внешние скобки ограничивают сам массив, а совокупность внутренних скобок { и } ограничивают текст каждой строки. Учитывая, что символы “ являются ограничителями символьной строки, то вместо внутренних скобок можно использовать символы “.
Например,
char g[3][15] = {
“Иванов И. И.”,
“Антонов Л. А.”,
“Попов С. М.”,
};
Для экономии оперативной памяти и избежания переполнения выделенного пространства под строку (что приводит к потери конечных символов, в том числе символа окончания строки ‘\0’) применяют описание совокупности строк с использованием одномерного массива указателей, размер которого равен числу инициализируемых строк.
Например,
char *pg[3] = {
“Иванов И. И.”,
“Антонов Л. А.”,
“Попов С. М.”,
};
Такое описание определяет массив, где количество строк равно количеству инициализируемых строк, а количество столбцов каждой строки массива определяется количеством символов в ней плюс символ окончания строки ‘\0’.
В оперативной памяти выделяются ячейки как для хранения массива указателей, так и для хранения списка строк.Схема выделения оперативной памяти имеет вид
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
| pg[0]
| pg[1]
| pg[2]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
| pg[0]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
| И
| в
| а
| н
| о
| в
|
| И
| .
|
| И
| .
| \0
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
| pg[1]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
| А
| н
| т
| о
| н
| о
| в
|
| Л
| .
|
| А
| .
| \0
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
| pg[2]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
| П
| о
| п
| о
| в
|
| С
| .
|
| М
| .
| \0
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
Компилятор выделяет три ячейки памяти для хранения элементов массива указателей pg, а также необходимое количество ячеек для хранения списка строк. Адреса каждой из строк записываются в соответствующие ячейки массива pg.