Объясните почему результат различается (массивы 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' находится нулевой байт, а то вы могли бы получить более длинные строки...

→ Ссылка