Что подразумевается под этим?
Это объявление создает отображаемый массив и связывает начальный адрес со строкой.
Это означает, что
- массив создается в памяти и заполняется содержимым
"Hello!"
(то есть символов 'H'
, 'e'
, 'l'
, 'l'
, 'o'
, '!'
, '\0'
) - создается переменная-указатель
str
, указывающая на начальный адрес созданного ранее массива.
Однако это неверно .Описание в книге неверно или, по крайней мере, серьезно вводит в заблуждение.
str
- это не указатель, это массив .Следовательно, он не «связан с начальным адресом».Он связан со всем массивом.
К сожалению, проблема становится еще более запутанной, поскольку C ++ и C позволяют неявно преобразовывать массивы в указатели.То есть допустимо следующее:
char* x = str;
Это называется «затуханием указателя», и это все время происходит в C ++.Достаточно навести взгляд на массив, чтобы преобразовать его в указатель.
Этот распад указателя эквивалентен следующему:
char* y = &str[0];
То есть, когда массив распадается на указатель,этот указатель указывает на первый элемент массива.Вероятно, это подразумевается как «связывает начальный адрес с str», но, как я объяснил выше, это не совсем правильно.(Кроме того, начальный адрес массива обычно перед адресом его первого элемента, поскольку массив также должен хранить свой размер, и этот размер обычно помещается в память непосредственно перед первым элементом массива.; но на это поведение нельзя положиться, это деталь реализации.)