Как объявить строки в C
Возможный дубликат:
Распределение памяти char * и char []
Может ли кто-нибудь объяснить мне, какая разница между этими строками кода
char *p = "String";
char p2[] = "String";
char p3[7] = "String";
В каком случае я должен использовать каждое из указанных выше?
Ответы
Ответ 1
Эта ссылка должна удовлетворять ваше любопытство.
В принципе (забыв твой третий пример, который плохой), разные между 1 и 2 - это то, что 1 выделяет пространство для указателя на массив.
Но в коде вы можете манипулировать ими как указатели все равно - только одно, вы не можете перераспределить второй.
Ответ 2
Строки в C представлены как массивы символов.
char *p = "String";
Вы объявляете указатель, указывающий на строку, хранящуюся где-то в вашей программе (изменение этой строки - поведение undefined) в соответствии с языком программирования C 2 ed.
char p2[] = "String";
Вы объявляете массив char, инициализированный строкой "String" , оставляя компилятору задание для подсчета размера массива.
char p3[5] = "String";
Вы объявляете массив размером 5 и инициализируете его "String" . Это ошибка, потому что "String" не вписывается в 5 элементов.
char p3[7] = "String";
является правильной декларацией ('\ 0' является завершающим символом в строках c).
http://c-faq.com/~scs/cclass/notes/sx8.html
Ответ 3
Вы не должны использовать третий, потому что это неправильно. "String" занимает 7 байтов, а не 5.
Первый - это указатель (может быть переназначен на другой адрес), два других объявлены как массивы и не могут быть переназначены в разные ячейки памяти (но их содержимое может измениться, используйте const
, чтобы этого избежать).
Ответ 4
char *p = "String"; means pointer to a string type variable.
char p3[5] = "String"
; означает, что вы предварительно определяете размер массива, состоящий не более чем из 5 элементов. Обратите внимание, что для строк нулевой "\ 0" также рассматривается как элемент. Таким образом, этот оператор дал бы ошибку, так как число элементов равно 7, поэтому оно должно быть:
char p3[7]= "String";