在C++中,为什么直接输出char类型变量的地址为乱码?
如下代码:
#include <iostream>
using namespace std;
void main()
{
void *pt;
char cc= 'c ';
int x=0;
pt=&cc;
cout < < "&cc = " < <&cc < <endl;
cout < < "pt = &cc = " < <pt < <endl;
pt=&x;
cout < < "&x = " < <&x < <endl;
cout < < "pt = &x = " < <pt < <endl;
}
输出结果为:
&cc = c烫蘴
pt = &cc = 0012FF78
&x = 0012FF74
pt = &x = 0012FF74
不明白的是:为什么第一行输出的cc的地址为乱码?而把这个地址赋值给一void类型的指针,则能正确输出其结果,若把它赋给一char类型的指针,再输出该指针值时,那么也显示乱码。在它下面,直接输出int类型变量的地址,则是正常的。
这是为什么呢?烦请高手帮忙解释解释。谢谢!!
[解决办法]
这很是因为程序把&cc当作一个字符串的首地址了,所以打印了一串乱码。
而int型是不会出现这种情况的。
[解决办法]
char x;
char* p = &x;因为这样合法,所以输出乱码正常.
被当成字符串了
[解决办法]
< < 运算符重载时候,当参数是 char* 的时候
cont就输出字符串
比如
char* p = "aaaaa ";
cout < <p < <endl;
输出aaaaa
char c;
&c 的类型就是 char* 了
所以cout就按字符传输出
[解决办法]
不要把C的字符串和C++中的string混淆
[解决办法]
这个你的搞清楚两点:
1、C/C++语法中输出字符串指针,就是输出字符串,也就是说输出一个char*的指针一定是输出一个字符串,而不会输出指针,其它的类型都不会这样,所以你把它转成void*就会输出地址。
2、你所说的string ss,它是一个string的对象,我刚才说了除了char*其它的都是输出指针,输出ss的地址,当然就是指针了。