- обр само по себе является "символ [5]" не "Const символ (*) [5]". И он неявно приводится к «char *» rvalue, когда вы пишете cin >> arr.Это не константа, потому что это даже не значение lvalue.
И «const char *» или «char const *» означает, что указанное значение lvalue не может быть изменено, в то время как «char * const» означает, что сам указатель lvalue не может быть изменен. Но это не имеет никакого отношения к вам.
- Во-первых, не было пробелов. И cin добавляет нулевой символ.
Массив это просто массив:
char a[5]; //a's type is char[5];
Но массив вряд ли может быть операндом. Только операторы, которых я помню, принимают тип массива sizeof и & (адрес) (С другой стороны, это означает, что иногда это должен быть массив. Или если вы напишете sizeof (a), он даст вам размер указателя.). Для других операций a преобразуется в char * rvalue. И да, даже когда вы пишете [0], a [1] и т. Д. A [0] эквивалентно * (a + 0), который работает с указателями, но не с массивами.
Если вы не можете назначить на что-то, это не всегда означает, что вещь «Уст»:
- Вы не можете присвоить константной переменной, конечно.
- Вы можете назначать только переменную (или aka lvalue), поэтому вы не можете присвоить значение rvalue (или значение aka). Таким образом, вы не можете написать 1 = 2, потому что 1 является rvalue не переменной, а не потому, что 1 является «const».
- Вы должны присвоить что-то переменной, соответствующей ее типу. Поэтому, если у вас есть const char * p и char * q, вы не можете написать q = p. Их типы не совпадают. И опять же, это не означает, что q является const, потому что это явно не так. Но вы можете написать p = q, потому что char * может быть неявно приведен к const char *. Но const char * должен быть явно передан char *.
, если они будут проиндексированы до 0, то почему во втором коде они были обработаны как пробелы? – AlexDan
Почему, по-вашему, они воспринимаются как пробелы? Попробуйте перенаправить вывод в текстовый файл, а затем изучите его с помощью шестнадцатеричного редактора. –
Я скопировал ваш код, Он напечатал hi X, а не hiX. – AlexDan