Указатели и адреса - PullRequest
       20

Указатели и адреса

1 голос
/ 01 мая 2010

Рассмотрим приведенный ниже пример

int nCount[2] = {5,10};
int* ptrInt;
ptrInt = nCount;
cout<<ptrInt<<Endl;//this will print the address of arrar nCount

Теперь рассмотрим это

char *str = "Idle mind is a devil's workshop";
int nLen = strlen(str);

char* ptr;
ptr = new char[nLen+1];

strcpy(ptr,str);

cout<<ptr<<endl;//this wil print the string 

но это не должно быть печатью адреса ул. Я не совсем понимаю разницу.

Ответы [ 3 ]

7 голосов
/ 01 мая 2010

Поскольку char* s часто используются для хранения строк, выходной поток operator<< перегружен для char*, чтобы вывести указанную строку вместо указателя.

Если вы хотите вывести указатель, вы можете привести указатель к void* и затем вывести его.

1 голос
/ 01 мая 2010

Что ж, существует перегрузка для оператора потока, который имеет дело с char* в качестве особого случая. Все остальные типы указателей используют перегрузку void*. Вот соответствующие перегрузки оператора потока из стандартов:

basic_ostream<charT,traits>& operator<<(const void* p); // all types of pointers

template<class charT, class traits> // except for c-strings
basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&,
const char*);
1 голос
/ 01 мая 2010

Если вы хотите адрес:

 cout << (void *) ptr < <endl;

Оператор << перегружен для многих типов - для char *, он печатает строку, для void * он печатает адрес.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...