关于C++字符指针与地址

来源:百度知道 编辑:UC知道 时间:2024/06/27 19:45:15
程序如下:
#include<iostream>
using namespace std;
void main()
{
char a='x',*s=&a;
int b=3,*p=&b;
cout<<s<<endl<<p<<endl;
}
为什么输出中s为乱码,而p为地址呢?

同上。字符串以'\0'字符结束。而a地址后面为未知空间。

cout<<s<<endl<<p<<endl;
被编译器翻译成
cout<<(char *)s<<endl<<(int *)p<<endl;
当然会有乱码出现了(char*会输出直到结束符"\o")
强行转换,才能不乱:
cout<<(int)s<<endl<<p<<endl;

程序修改后如下:
#include<iostream>
using namespace std;
void main()
{
char a='x',*s=&a;
int b=3,*p=&b;
cout<<*s<<endl<<*p<<endl;
}
只需要在最后一句输出的时候在s和p的前面加上一个*号就可以的啦,这样就可以正确的输出的啦!程序的输出结果为:x (换行输出) 3,这是改正后的输出结果的!
千万要注意指针的输入与输出和传递的应用!

s被当作字符串指针了