Мне интересно, как строки хранятся в памяти, когда задают их с помощью / через массив указателей, которые указывают на них.
Например:
char *pa[] = { "Hello World!", "foo","bar","huhu","Let´s talk about that" };
Являются ли строки(или лучше: их символы) хранятся последовательно в памяти, один за другим?
Как, например, в этом случае:
Первый байт второй строки "foo"
, который является f
сохраняется непосредственно внутри байта после символа \0
-Null первой строки "Hello World!"
.
ИЛИ
Разделяются ли строки в памяти? Например:
\0
- Нулевой символ первой строки "Hello World!"
- последовательность байтов между- f
символ второй строки "foo"
?
ИЛИ
Возможно ли, что хранилище зависит от ситуации, компилятора, платформы и т. Д. И от его одноразового обращения напрямую-последовательный, а один раз нет?
Может ли также произойти, что первый символ f
второй строки "foo"
сохраняется непосредственно после \0
-характера первой строки "Hello World!"
означает, что они хранятся последовательно, и между \0
-характером второй строки "foo"
и первым символом третьей строки "bar"
, то есть b
, является пробел в группе строк, не являющейся- связанные байты, зависящие от компилятора, платформы и т. д.?
1039 * Вопрос для C и C ++, так как я работаю с обоими. Если ответы между этими двумя изменениями, пожалуйста, укажите, какой язык в фокусе.
Надеюсь, вы понимаете, что я имею в виду. Большое спасибо за любой ответ.