C++ устанавливает значение указателя на ноль

В Visual Studio 2012 я возился с указателями и понял, что эта программа продолжает падать:

    #include     <iostream>
    using std::cout;
    using std::endl;

    int main () 
   {

       const char* pointer = nullptr;

       cout << "This is the value of pointer   " << pointer << "." << endl;

       return 0;

   }

Мое намерение было установить pointer в null, а затем распечатайте адрес. Несмотря на то, что программа компилируется, во время выполнения происходит сбой. Может кто-нибудь объяснить, что происходит?

Кроме того, в чем разница pointer а также *pointer

2 ответа

Вы используете const char* который при использовании в std::cout"s operator <<, интерпретируется как строка.

Примени это void* чтобы увидеть значение указателя (адрес, который он содержит):

cout << "This the value of pointer   " << (void*)pointer << "." << endl;

Или, если вы хотите быть педантичным:

cout << "This the value of pointer   " << static_cast<void*>(pointer) << "." << endl;

Живой пример

Хотя вы можете сделать cout << "Pointer is " << (void*)pointer << ".\n"; как уже было предложено, я чувствую, что в этом случае "способ C" делает это красивее (без кастинга) и более читабельным: printf("Pointer is %p\n",pointer);

Другие вопросы по тегам