我很忙1991 发表于 2014-11-4 22:28:47

指针和输出

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


charsome_charactes="Hello" ;
char*char_ptr =&some_charaters;
std::cou<<"String pointer "<<char_ptr<<'\n' ;
输出
string pointer Hello

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

fireofsun 发表于 2014-11-5 08:26:38

首先提醒楼主,是std::cout,然后再告诉楼主,cout对于字符串指针的输出默认是输出其字符串的值,就跟你std::cout<<some_charactes<<endl;效果是一样的。

仰望天上的光 发表于 2014-11-5 08:35:53

这是编写cout这个对象的类的人的设定,当输出char*类型时,就当作C风格的字符串输出;输出其它类型的指针时,就输出其地址。

关键问题在于,这个类(cout所属的类)不是你写的,所以你无法控制它的行为,只能熟悉并接受既定的行为。

我很忙1991 发表于 2014-11-5 13:22:24

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

按你这样说为什么第一个是地址啊!我是菜鸟,大神能不能讲的讲的简单点

我很忙1991 发表于 2014-11-5 13:24:06

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

大神你这样一讲我就更晕了,能不能直白点或者举个简单的例子。。。求你了。。。。

calton007 发表于 2014-11-5 16:20:18

charsome_charactes="Hello" ;
等价于char *some_characters

fireofsun 发表于 2014-11-5 16:26:12

第一个你输出的是指针,cout发现你想要输出指针时会去看看你指针是什么类型的,如果是char*的就当做字符串输出,如果是别的类型,就当地址输出。如果是当字符串输出,它就会从指针指向的地址开始一直向后输出,直到第一个'\0',所以,如果有如下代码:        char x='a';char *y=&x;std::cout<<y<<std::endl;输出结果就是a后面一堆乱码。放心这不是你的问题,这是因为C++为了兼容C风格字符串而留下的臭毛病

我很忙1991 发表于 2014-11-5 18:19:50

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

现在明白了很多,谢谢大神你你的耐心教导。。。。万分感激。。。:lol::handshake

风之残月 发表于 2014-11-8 20:43:50

这是语言的设定,对于字符串指针的输出默认输出字符串,而其它的几乎都是输出它的值,这里int_ptr虽然是一个指针,但它同时也是一个变量,只不过它存储的是变量的地址,所以输出的是an_integer的地址,如果是*int_ptr则是5
std::cou应该改为std::cout
页: [1]
查看完整版本: 指针和输出