cout与指针

来源:百度知道 编辑:UC知道 时间:2024/06/26 01:48:58
int a=10;
int *p=&a;
cout<<p;
cout<<&p;
char s='a';
char *q=&s;
cout<<q;
cout<<*q;这会有什么结果,为什么输出整形的指针和字符的指针会不一样呢,这个函数是怎么定义的呢
0x0012FF7C
0x0012FF78
a烫蘾?
a
Press any key to continue当然是不一样了,这是刚才那个程序的结果,安理说cout<<q应该输出s的地址,但输出的却是乱码,请解释一下吗?还有如果s 是一个字符数组,即char s[]="hello",则cout<<s;输出的将是它的内容,而不是数组的首地址,这又和上面的整形指针的情况不一样,请问这是为什么呢

int main()
{
int a=10;
int *p=&a;

cout<<p<<endl;
cout<<&p<<endl;

char s='a';
//char *q=&s;
char *q="hello";

cout<<q<<endl;
cout<<*q<<endl;
}

这个程序的输出是:
a的地址
p的地址
q指向的字符串hello
q指向的地址中的字符h

因此,char *q=&s;
cout输出时,也是把q当成字符串向外输出的
由于字符串的结束符不知道在q指向的地址后面的什么位置
所以输出的字符串的首字符是a,但后面就不可预期了

整型指针,不会理解为字符串的,没有歧义
字符形指针,会当成字符串处理的,这也是自然而然的事情

如果你想输出地址,可以加(void*)把q强制转换一下

第一个输出的变量a的地址
第二个输出是指针p的地址
第三个输出的是s的地址
第四个输出的是*q所指的变量的值

哪有输出整形的指针和字符的指针不一样啊?

首先cout<<*q输出q指向的内容,即s的值而不是s的地址,不知道是不是你敲错了。
另外不明白你的意思“为什么输出整形的指针和字符的指针会不一样”

最后告诉你cout<<p; 输出的是变量p指向的变量的地址,cout<<&p; 输出的是变量p的地址。

这是一个相当经典的问题。

1.

char *q=&s;这一句中,&s被当作一个字符串
(在c++中,通常我们会这样:char *p="hello";),
所以cout<&l