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

176
15 декабря 2016, 16:02

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

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-ричные числа?

Answer 1

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

Answer 2

к вышесказанному прибавлю - вот так можно получить адреса ячеек массива из типа 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;
}
READ ALSO
Грамотная передача исключений

Грамотная передача исключений

Знаю, что в JAVA передача исключения реализуется через объекты класса

247
С чего начать изучать QT?

С чего начать изучать QT?

Установил qt creator под виндой c базой на QT 48

153
Передать widget в другой класс [закрыто]

Передать widget в другой класс [закрыто]

Есть класс downloader и есть класс dataНужно передать downloader у data, чтобы из data вызвать функцию, которая у downloader

169
Распознать текст на пачке скриншотов

Распознать текст на пачке скриншотов

Есть играПерсонаж игры произносит много разных реплик (~400 штук)

169