C++问题,我想输出字符的地址,但是为什么输出的是乱码呢?

数组是整形的话没问题,输出的是地址。但是字符型的话,就出现了这样的乱码

 

std::cout 对象有重载的,<<后面不一样的类型会调用不一样的函数。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-03-02
a被定义成字符数组,5个空间,5个字符
而b是字符指针
当cout << b+i <<"\n" ;时,系统会把b+i所指向的空间中的数据当字符串处理,它需要一个结束符
而a数组中没有提供这个结束符'\0',所以会出现你的现象。
修改方法:
char a[SHU+1]={'a','b','c','d','e'} ;这样就好了

如果想输出单个字符,则需要如下修改:
cout << *(b+i) <<"\n" ;

你如果将a的类型改成int,则按你现在的代码,输出的应该是地址值,要输出相应的数值,也应该改成*(b+i)
第2个回答  2013-03-02
对于字符指针,要输出地址要如下用:std::cout<<&(b+i)<<"\n";
如果像你写的那样,则是输出字符串,由于你的字符数组a中没有'\0'结尾,所以输完字符e后则是乱码了啦
第3个回答  2013-03-02
你输出的不是地址,而是指针b+i这个位置的 字符
因为b是char* 类型的,所以遇到结束符才结束输出,如果a[4]='\0' 就不会有乱码了
想输出地址,&b
第4个回答  2013-03-02
std::cout<<(void)(b+i)<<'\n';追问

你写的代码编译错误啊

追答

std::cout(b+i)比较好……
cout对于char*有特殊处理,因此要输出地址的话要转换成其他类型的指针……

本回答被提问者采纳
相似回答