char a = 'h';
cout << &a;
就会出现乱码:h烫烫烫烫篾
看了这个贴:https://bbs.csdn.net/topics/310062432
改成printf("%p",&a);
或者std::cout << (void *)&a;
就可以输出地址了。
原因:(摘自上面提到的贴子评论)
cout << type是一个重载函数.
编译器会先诠释type是什么类型,以取舍哪个.
当它检视&a,发现char *.
接下来,它会怎么做呢?
它会找最合适的那个重载函数.而cout << char*被找到了.
它的执行,意味着将指针指向地址的字符串输出(以NULL结尾).
"h烫烫?":第一个字母还是h,后面才开始异常,直到NULL才结束.