Вывод на экран адресов памяти для типа char

Рейтинг: 2Ответов: 2Опубликовано: 15.01.2015

Есть следующая ф-я.

int main()
{
    bool arr[6];
    for (int i = 0; i < 6; i++)
    {
        cout << &arr[i] << "   ";
    }
    cout << endl;

    char arr2[6];
    for (int i = 0; i < 6; i++)
    {
        cout << &arr2[i] << "   ";
    }
    cout << endl;
    return 0;
}

Почему при массиве из char выводятся непонятные символы, а не 16-ричные числа?

Ответы

▲ 4Принят

Оператор cout << c; где с имеет тип char*, считает, что с - нуль-терминированная сишная строка. Чтобы вывести адрес типа char*, нужно привести данный тип к void*, например: cout << (void*)c;

▲ 1

к вышесказанному прибавлю - вот так можно получить адреса ячеек массива из типа char:

#include <iostream>

using namespace std;

int main(){
    bool arr[6];
    for (int i = 0; i < 6; i++)
    {
        cout << &arr[i] << "   ";
    }
    cout << endl;

    char arr2[6];
    for (int i = 0; i < 6; i++)
    {
        cout << &arr2 + i << "   "; // получаем адреса с помощью адресной арифметики
    }
    cout << endl;

    return 0;
}