鱼C论坛

 找回密码
 立即注册
查看: 1543|回复: 8

指针和输出

[复制链接]
发表于 2014-11-4 22:28:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
int  an_integer = 5;
int  *int_ptr =&an_integer ;
std::cou<<"Interger pointer"<<int_ptr<<'\n' ;
输出
integer pointer 0x58239A


char  some_charactes[10]="Hello" ;
char  *char_ptr =&some_charaters[0];
std::cou<<"String pointer "<<char_ptr<<'\n' ;
输出
string pointer Hello

问题:上面两个程序的形式一样,为什么一个输出是地址,一个输出字符串。。。。。。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-11-5 08:26:38 | 显示全部楼层
首先提醒楼主,是std::cout,然后再告诉楼主,cout对于字符串指针的输出默认是输出其字符串的值,就跟你std::cout<<some_charactes<<endl;效果是一样的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-5 08:35:53 | 显示全部楼层
这是编写cout这个对象的类的人的设定,当输出char*类型时,就当作C风格的字符串输出;输出其它类型的指针时,就输出其地址。

关键问题在于,这个类(cout所属的类)不是你写的,所以你无法控制它的行为,只能熟悉并接受既定的行为。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-5 13:22:24 | 显示全部楼层
fireofsun 发表于 2014-11-5 08:26
首先提醒楼主,是std::cout,然后再告诉楼主,cout对于字符串指针的输出默认是输出其字符串的值,就跟你std ...

按你这样说为什么第一个是地址啊!我是菜鸟,大神能不能讲的讲的简单点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-5 13:24:06 | 显示全部楼层
仰望天上的光 发表于 2014-11-5 08:35
这是编写cout这个对象的类的人的设定,当输出char*类型时,就当作C风格的字符串输出;输出其它类型的指针时 ...

大神你这样一讲我就更晕了,能不能直白点或者举个简单的例子。。。求你了。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-5 16:20:18 | 显示全部楼层
char  some_charactes[10]="Hello" ;
等价于  char *some_characters
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-5 16:26:12 | 显示全部楼层
第一个你输出的是指针,cout发现你想要输出指针时会去看看你指针是什么类型的,如果是char*的就当做字符串输出,如果是别的类型,就当地址输出。如果是当字符串输出,它就会从指针指向的地址开始一直向后输出,直到第一个'\0',所以,如果有如下代码:        char x='a';char *y=&x;std::cout<<y<<std::endl;输出结果就是a后面一堆乱码。放心这不是你的问题,这是因为C++为了兼容C风格字符串而留下的臭毛病
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2014-11-5 18:19:50 | 显示全部楼层
fireofsun 发表于 2014-11-5 16:26
第一个你输出的是指针,cout发现你想要输出指针时会去看看你指针是什么类型的,如果是char*的就当做字符串 ...

现在明白了很多,谢谢大神你你的耐心教导。。。。万分感激。。。:lol::handshake
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-8 20:43:50 | 显示全部楼层
这是语言的设定,对于字符串指针的输出默认输出字符串,而其它的几乎都是输出它的值,这里int_ptr虽然是一个指针,但它同时也是一个变量,只不过它存储的是变量的地址,所以输出的是an_integer的地址,如果是*int_ptr则是5
std::cou应该改为std::cout
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-5 02:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表