Пример объявления массива из 20 строк, в каждой из которых содержится до 59 символов включительно.
char str mas [20] [60];
Язык C не поддерживает отдельный строковый тип данных. Он позволяет определить строки двумя различными способами: в первом используется массив символов, а во втором – указатель на первый символ массива. Объявление – char a [10] – указывает компилятору на необходимость резервирования места для max 10 символов. Константа а содержит адрес ячейки памяти, в которой помещено значение первое из 10 объектов типа char. Процедуры, связанные с занесением конкретной строки в массив а, копируют ее по одному символу в область памяти, на которую указывает константа а, до тех пор, пока не будет скопирован нулевой символ, заканчивающий строку. Когда выполняется функция типа printf (" % S ", a), ей передается значение а, т.е. адрес первого символа, на который указывает а. Если первый символ нулевой, то работа функции printf заканчивается, а если нет, то она выводит его на экран, прибавляет к адресу 1 и снова начинает проверку на нулевой символ. Такая обработка позволяет снять ограничения на длину строки (в рамках объявленной размерности). Строка может быть любой длины до тех пор, пока есть место в памяти, куда можно ее поместить. Вторым способом определения строки является использование указателя на символ. Использование char *b задает переменную b, которая может содержать адрес некоторого объекта. Объявление типа char * b задает переменную b, которая может содержать адрес некоторого объекта. В данном случае компилятор не резервирует память для хранения символов, и не инициализирует переменную в конкретном значении. Когда компилятор встречает инструкцию вида b = " Минск ", он производит следующие действия:
1) Как и в предыдущем случае, он создает в каком-либо месте объектного модуля строку Минск, за которой следует нулевой символ.
2) Он присваивает значение начального адреса этой строки, адрес символа " Минск " переменной b. Функция printf (" % S ",b);
работает следующим образом, она осуществляет вывод символов до тех пор, пока не встретится заключающий ноль, т.е. аналогично первому способу.
Массив указателей можно инициализировать, т.е. назначить его элементам конкретные адреса некоторых заданных строк при объявлении.
Если объявить char my __ char [3,6] в памяти выделится
У | Ч | И | Т | Е | \0 |
С | \0 | \0 | \0 | \0 | \0 |
! | \0 | \0 | \0 | \0 | \0 |
Если будет объявлена следующим образом char * my __ char [3], то в памяти будет выделено:
У | Ч | И | Т | Е | \0 |
С | \0 | ||||
! | \0 |
Это значительно экономит память. C позволяет создавать массивы с размерностями больше 2.
Дата добавления: 2016-04-14; просмотров: 550;