|
|||
Символьные строки. char* str;Стр 1 из 3Следующая ⇒ Символьные строки Под строкой будем понимать совокупность непрерывно расположенных в памяти символов (ASCII-кодов). В С(С++) отсутствует тип данных символьная строка. Механизм работы со строками обычно реализуется через указатели типа char*: char* str; Это указатель на область памяти, каждый элемент которой имеет размер один байт. Как и обычный указатель, указатель на тип char может быть инициализирован при его описании. Для этого используется строковая константа, при этом адрес ее первого символа будет присвоен указателю, например: char *str="строка"; При этом выделяется память для строки размером семь байт и указатель инициализируется адресом символа с. Признаком окончания символьной строки является нуль-символ ('\0'). При его отсутствии информация в массиве будет являться набором символов, но не символьной строкой. В выражениях, где применяется указатель, компилятор подставляет адрес константы. Строковая константа - это любое выражение, заключенное в двойные кавычки. При встрече строковой константы ее символы и символ '\0' записываются в последовательные ячейки памяти. Строковые константы размещаются в статической памяти. Также можно создать массив указателей типа char (массив строк). char *str[5]; // массив из 5-ти указателей Инициализацию массива строк (массива указателей char*) можно выполнить следующим образом: char str1[][8]={"строка1","строка2"}; char *str2[2]; str2[0]="строка1"; str2[1]="строка2”; сhar *str3[2]={ "строка1","строка2"}; Строковая константа, как и любая другая константа в С(С++), может быть также определена с помощью директивы #define, например: #define st1 "Минск" #define st2 "каф. ЭВМ" В чем состоит отличие объявления символьной строки через указатель на тип char и с использованием массива типа char. Эти два подхода имеют общие стороны: имя массива является адресом его начала, указатель также содержит адрес начала некоторой области памяти. В то же время имя массива (например, mas) является константным значением. То есть мы не можем изменить значение mas, так как это по существу означало бы изменение адреса массива в памяти. Следовательно, для доступа к очередному элементу массива можно использовать выражение вида mas+1, но не ++mas. При использовании указателей происходит выделение в динамической памяти области для размещения в ней строки, а переменная str, являющаяся указателем на эту область (строку) размещается в статической памяти. При этом значение этой переменной может изменяться, таким образом, ++str будет указывать на следующий символ строки.
|
|||
|