2016-04-28 3 views
-4

В чем разница между этими двумя определениями?В чем разница между этими двумя определениями?

char *string = "MyString"; 
char string[] = "MyString"; 

Насколько я знаю, первый из них является указателем на строку.

+0

C не имеет строкового типа. И ответ можно найти, изучив основы языка. – Olaf

+0

Их тип и количество ограничений, которые создает компилятор для доступа к объекту. – Jens

+0

см. Также http://stackoverflow.com/questions/30533439/string-literals-vs-array-of-char-when-initializing-a-pointer –

ответ

1

Первый представляет собой указатель на строку буквальной, второй массив инициализирован с содержимым строки буквальной (, который КСТАТИ, когда оптимизированные точки точно где string точек).

Первый живет в сегменте памяти только для чтения и поэтому не может быть изменен.

Второй представляет собой массив из 9 элементов, и вы можете изменить любой из 9 элементов, включая байт null, который явно не задан в коде вашего вопроса.

Смежные вопросы