Мне интересно, какая разница между char s[] = "hello"
и char *s = "hello"
.
После прочтения этого и this, я все еще не очень понятен по этому вопросу.
Как я знаю, в памяти есть пять сегментов данных: текст, BSS, данные, стек и куча.
С моей точки зрения,
в случае char s[] = "hello"
:
-
"hello"
находится в тексте. -
s
находится в Data, если это глобальная переменная или Stack, если это локальная переменная. -
У нас также есть копия
"hello"
, где хранитсяs
, поэтому мы можем изменить значение этой строки с помощьюs
.
в случае char *s = "hello"
:
-
"hello"
находится в тексте. -
s
находится в Data, если это глобальная переменная или Stack, если это локальная переменная. -
s
просто указывает на"hello"
в тексте, и у нас нет его копии, поэтому изменение значения строки с помощью этого указателя должно привести к ошибке "Сегментационная ошибка".
Я прав?