Значение мусора в указателе на символ - PullRequest
0 голосов
/ 03 февраля 2019

В коде:

int main(){
int a = 10;
int * s =  &a;
cout << s;
}

Адрес памяти «а» печатается, как и ожидалось.Тем не менее, когда я пытаюсь:

int main(){
char a = 10;
char * s =  &a;
cout << s;
}

Вывод является значением мусора.Что может быть причиной этого?

1 Ответ

0 голосов
/ 04 апреля 2019

Это потому, что operator<< имеет специальную функциональность для обработки указателей символов, так как они являются строками в устаревшем C. Таким образом, предполагается, что любой char *, который вы ему дадите, является указателем на первый символ в устаревшей строке C, и выведитеэто как таковое.

Если вы хотите специально обработать его как указатель, приведите его к типу указателя без специальной обработки, что-то вроде:

cout << static_cast<void *>(s);
...