Хелпикс

Главная

Контакты

Случайная статья





Символьные строки. char* str;



Символьные строки

Под строкой будем понимать совокупность непрерывно расположенных в памяти символов (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 будет указывать на следующий символ строки.

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.