Во время выполнения программы выделяется блок памяти, содержащий «это тест», а адрес первого символа в этом блоке памяти назначается переменной myString.В следующей строке выделен отдельный блок памяти, содержащий «это очень очень ...», и адрес первого символа в этом блоке памяти теперь назначен переменной myString, заменив адрес, который он использовал дляхранить с новым адресом в «очень очень длинной» строке.
только для иллюстрации, скажем, первый блок памяти выглядит так:
[t] [h] [i][s] [] [i] [s] [] [a] [] [t] [e] [s] [t], и давайте просто скажем адрес этого первого символа 't' в этой последовательности / массиве символов0x100.поэтому после первого присваивания переменной myString переменная myString содержит адрес 0x100, который указывает на первую букву «это тест».
затем совершенно другой блок памяти содержит:
[t] [h] [i] [s] [] [i] [s] [] [a] [] [v] [e] [r] [r] [y] ... идавайте просто скажем, что адрес этого первого символа 't' равен 0x200.поэтому после второго присваивания переменной myString переменная myString NOW содержит адрес 0x200, который указывает на первую букву «это очень очень очень ...».
Поскольку myString - просто указательдля символа (отсюда: «char *» - это его тип), он хранит только адрес символа;он не заботится о том, насколько большим должен быть массив, он даже не знает, что он указывает на «массив», только что он хранит адрес символа ...
дляНапример, вы могли бы сделать это на законных основаниях:
char myChar = 'C';
/* assign the address of the location in
memory in which 'C' is stored to
the myString variable. */
myString = &myChar;
Надеюсь, это было достаточно ясно.Если это так, то проголосуйте / примите ответ.Если нет, пожалуйста, прокомментируйте, чтобы я мог уточнить.