Я немного смущен. В чем логическая разница между этими кодами?
#include <iostream>
using namespace std;
int main(){
char a[5]="ABCD"; // this
cout << a;
return 0;
}
Второй
char a[5]={"ABCD"}; // this
Третье
char a[5]={'A','B','C','D'}; // this
char a[5]={"ABCD"};
char a[5]={'A','B','C','D','\0'};
В обоих случаях массив символов объявляется с размером 5 элементов типа char: 4 символа, составляющие слово «ABCD», плюс последний нулевой символ ( ‘\ 0’), который определяет конец последовательности и что во втором случае при использовании двойных кавычек («) он добавляется автоматически. Внимание, добавление нулевого символа через запятую. Последовательность символов, заключенная в двойные кавычки (» «), называется строковая константа. Компилятор C может автоматически добавлять нулевой символ '\0'
в конце строковой константы, чтобы указать конец строки.
Источник:Эта ссылка может помочь тебе лучше
Первые два являются назначением char[5]
источник к char[5]
массив только с другим синтаксисом. (5 — четыре буквы плюс нулевой терминатор)
Последний также будет делать то же самое, но он явно не указывает нулевой терминатор. Так как вы назначаете char[5]
последний будет по-прежнему заполнять нулем оставшееся пространство, эффективно добавляя нулевой терминатор и действуя так же, но последний не выдаст ошибку компилятора, если вы назначите char[4]
; это просто оставит вас с неопределенным массивом символов.