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);