В C строки представлены как последовательности char
с символом NULL (он же 0, '\0'
). Они хранятся в памяти, и вы работаете со способом ссылки на них. Вы определили два способа ссылки на него: char *
, который является указателем на последовательность chars
, и массив, который представляет собой непосредственную строку символов в качестве фактической переменной. Имейте в виду, что длина строки "abc" составляет 4 байта, поскольку в конце строки есть дополнительный символ NULL.
В дополнение к этому вы фактически назначаете строки в примере, который также включает строки, заданные во время компиляции.
Итак, два вопроса. Во-первых, о том, как вы представляете строки (char *
против char[]
), во-вторых, о строках времени компиляции.
Чтобы перейти к вашим примерам:
Первый создает в тексте программы константную строку и указатель на нее. В зависимости от компилятора он может храниться где угодно. Это эквивалент mallocing
строки и хранения указателя на нее, за исключением того, что вы не должны изменять содержимое памяти. Это char *
, поэтому вы можете изменить указатель так, чтобы он указывал куда-то еще, например, на другую строку malloced
или на начало массива, который вы определили в примере 2.
Второй создает массив символов (способ представления строки). Массив сохраняется и размещается в стеке на время работы функции, и вы можете изменить его содержимое. Поскольку это не указатель, вы не можете изменить его так, чтобы он указывал на другую строку.
person
Joe
schedule
25.08.2012
char *str
иchar str[]
и как они хранятся в памяти? - person Grijesh Chauhan   schedule 06.09.2013