Объясните почему результат различается (массивы int и char)
int main()
{
char *a = new char[5]{'a','b','c','d','e'};
cout<<&a[1] << "\n";
cout <<&a[1]+1<< "\n";
cout <<&a[1]+2<< "\n";
return 0;
}
Вывод: bcde cde de
int main()
{
int *a = new int[5]{1,2,3,4,5};
cout<<&a[1] << "\n";
cout <<&a[2]<< "\n";
cout <<&a[3]<< "\n";
return 0;
}
Вывод: 0x561864af9eb4 0x561864af9eb8 0x561864af9ebc
Вопрос: Почему в случае int выводятся адреса каждого элемента массива, а в случае char выводится "оставшийся" массив?
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Потому что в первом случае выводится char*, а во втором - int*.
Перегрузка оператора вывода для типа char* интерпретирует данные как С-строку (традиционно char* используется в основном для этой цели — работы со строками.
В случае int* выводятся значения указателей.
Кстати, на ваше счастье после 'e' находится нулевой байт, а то вы могли бы получить более длинные строки...