мы имеемПутаница между массива и указатель переменной
int a[2] = { 0, 1 } ;
std::cout << &a ;
std::cout << a ;
Теперь, когда я запускаю его, выход является одинаковым для обоих!
Из того, что я понял, a
распадается на указатель и дает мне адрес первого элемента массива i.e адреса a[0]
.
Что похоже на печать std::cout << &a[0]
.
Теперь не должно std::cout << &a
дать мне ошибку, так как a
сам возвращает указатель?
Нет - имя массива * обычно * распадается на указатель - но * не * при использовании в качестве операнда оператора 'sizeof' или оператора адреса (унарного' & '). –
Стоит отметить, что 'a' и' & a' имеют разные типы, но оба конвертируются в 'void *'. – Brian
Существует перегруженный 'operator <<', который принимает 'cout' и' void * '. Все указатели объектов могут быть преобразованы в 'void *', поэтому ошибок нет. –