c++ 字符的地址为什么会乱码

#include"iostream.h"
int main()
{
char c='a';
char *cptr=&c;
char **cptrptr=&cptr;
cout<<"Address of Var c="<<cptr<<endl;
cout<<"Data of Var c="<<*cptr<<endl;
cout<<"Address of Pointer cptr="<<cptrptr<<endl;
cout<<"Address of Var c="<<*cptrptr<<endl;
*cptr=2+*cptr;
cout<<"Data of Var c="<<*cptr<<endl;
return 0;
}

#include"iostream.h"
int main()
{
char c='a';
char *cptr=&c;
char **cptrptr=&cptr;
cout<<"Address of Var c="<<cptr<<endl;
cout<<"Data of Var c="<<*cptr<<endl;
cout<<"Address of Pointer cptr="<<cptrptr<<endl;
cout<<"Address of Var c="<<*cptrptr<<endl;
*cptr=2+*cptr;
cout<<"Data of Var c="<<*cptr<<endl;
return 0;
}
编辑结果是:
Address of Var c=a烫汤
Data of Var c=a
Address of Pointer cptr=0x0012FF78
Address of Var c=a烫汤
Data of Var c=c
Press any key to continue
c++初学者, 字符的地址为什么乱码?c++里的字符地址本来应该是什么样子?

是cout的原因,cout因为没有指定输出格式,默认会把&c当做是字符输出,所以会有乱码。
在C语言的printf中,由于指定了输出格式,所以可以正确显示c的地址。
=========================================
#include <stdio.h>
#include <IOSTREAM>
using namespace std;

int main()
{
char a='w';
printf("%p\n",&a);//指定了输出一个指针
cout << &a << endl;//C++的编译器默认把&a当做是一个字符,会输出乱码
cout << (void*)(&a) << endl;//通过强制转换,告诉C++编译器&a是一个地址
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-11-23
第一句输出语句。因为cptr是char*,所以默认输出cout<<cptr时,是会输出以cptr为起始地址、以\0为结尾的一个字符串。如果要输出字符串的地址,有个简单办法,是用void*转换一下,《C++ Primer 3rd Edition》里面就讲过这个问题。如下所示。

#include<iostream>
using namespace std;
int main()
{
char c='a';
char *cptr=&c;
char **cptrptr=&cptr;
cout<<"Address of Var c="<<(void*)cptr<<endl;
cout<<"Data of Var c="<<*cptr<<endl;
cout<<"Address of Pointer cptr="<<cptrptr<<endl;
cout<<"Address of Var c="<<(void*)*cptrptr<<endl;
*cptr=2+*cptr;
cout<<"Data of Var c="<<*cptr<<endl;

system( "pause" );
}追问

可是c是字符。不是字符串。用void*转换是不是可以把一个字符转变成结尾加'/0'的占用2个字符位置的字符串?

追答

char *cptr=&c;
这句话之后,cptr的类型就是char*,至于它指向的是单个字符,还是一个字符数组,都无所谓。
因为cptr的类型是char*,所以执行cout<<cptr时,会自动理解为,从cptr开始,往后输出字符,直到遇到字符串结束标志\0为止。
而用void*强制转换操作的是cptr,跟字符c是没有关系的。

本回答被提问者采纳
第2个回答  2011-11-23
字符串,以\0结尾,否则cout函数不只在哪结尾追问

我不明白,如果将c这么定义的话char c=“a”,不是才是以'\0'结尾的吗?

追答

char* 是指针,你不知道指向的字符串有多长,char是基本类型,固定8位

相似回答