мета-данные страницы
  •  

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
c:c_ultimate_guide:strings [2025/10/10 14:45] radi0devc:c_ultimate_guide:strings [2025/11/09 12:07] (текущий) – внешнее изменение A User Not Logged in
Строка 35: Строка 35:
 char abc[2] = "abc"; char abc[2] = "abc";
 </code> </code>
 +
 +===== Строка как указатель =====
 +
 +Но в языке Си также для представления строк можно использовать [[pointers|указатели]] на тип char:
 +<code c>
 +#include <stdio.h>
 +  
 +int main(void) {
 +  char *hello = "Hello METANIT.COM!";
 +  printf("%s", hello);
 +  return 0;
 +}
 +</code>
 +
 +Заданные таким образом строки __изменять нельзя__, в том числе указателями.
 +
 +В языке Си для работы со строками применяется такой механизм как //string interning// или //интернирование строк//. В этом случае строки в виде строковых литералов сохраняются в приложении в секции ''.rodata'' (read-only data), которые предназначены для данных только для чтения, а строковые литералы рассматриваются как неизменяемые данные.
 +
 +Указатель на строковой литерал содержит адрес первого бита литерала в этой секции неизменяемых данных
 +
 +<note>
 +Если два указателя с разными идентификаторами будут ссылаться на одинаковые строковые литералы - они будут ссылаться на один и тот же адрес в памяти.
 +</note>
 +
 +<note>
 +Как и любому указателю, такой строке можно задать значение NULL, но это будет не то же самое, что ''%%""%%'' тк такая строка не будет содержать нулевого байта.
 +</note>