指针指向string和数组 返回为什么不一样

yueyufei5 2011-01-28 03:41:11
char *p="Hello";
cout<<*p<<endl;
cout<<p<<endl;
int arr[3]={1,2,3};
int *p2=arr;
cout<<*p2<<endl;
cout<<p2;
string不就是char的数组么 为什么p返回的是Hello? 但是p2返回的是一个地址
...全文
163 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovesi3344 2011-01-29
  • 打赏
  • 举报
回复
其实,string不是一个class
而是一个typedef
今天看《effective C++》 刚好看到
你失误了 哦

[Quote=引用 1 楼 mstlq 的回复:]
string是一个class,不能简单理解成字符数组。
再说,楼主这里的不是string而是char*,cout的<<操作符对char*类型有特别的重载,可以输出字符串内容
[/Quote]
jackzhhuang 2011-01-28
  • 打赏
  • 举报
回复
其实就是因为指针类型不一样,就这么简单
jikeyuan1 2011-01-28
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 piaojun_pj 的回复:]

char *p="Hello";不能简单的理解为数组,因为它是常量,你不能*p='a';而且在C++中cout<<其实是函数调用,const ostream& operator<<(char* str)const;所以cout<<p;就能够输出整个字符串,因为C++中没有重载const ostream& operator<<(int* str)const;这个版本,所以cout<……
[/Quote]
学习啦
寂寞的泡面 2011-01-28
  • 打赏
  • 举报
回复
char *p="Hello";不能简单的理解为数组,因为它是常量,你不能*p='a';而且在C++中cout<<其实是函数调用,const ostream& operator<<(char* str)const;所以cout<<p;就能够输出整个字符串,因为C++中没有重载const ostream& operator<<(int* str)const;这个版本,所以cout<<p2只能输出p2的值(int arr[]数组的首地址)。
modaoshi3002 2011-01-28
  • 打赏
  • 举报
回复
basic_string<>才是个模板类,
string是 basic_string<char>,
而实际上我们完全可以换掉这个char
常用的可以是wchar_t
modaoshi3002 2011-01-28
  • 打赏
  • 举报
回复
都在引用1楼,我就不引用了。

其实。。。。








string不是一个class









它是一个typedef

typedef basic_string<char> string;
未注销 2011-01-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mstlq 的回复:]
string是一个class,不能简单理解成字符数组。
再说,楼主这里的不是string而是char*,cout的<<操作符对char*类型有特别的重载,可以输出字符串内容
[/Quote] +
TimZhuFaith 2011-01-28
  • 打赏
  • 举报
回复
学习了[Quote=引用 1 楼 mstlq 的回复:]
string是一个class,不能简单理解成字符数组。
再说,楼主这里的不是string而是char*,cout的<<操作符对char*类型有特别的重载,可以输出字符串内容
[/Quote]
InfidelX 2011-01-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mstlq 的回复:]
string是一个class,不能简单理解成字符数组。
再说,楼主这里的不是string而是char*,cout的<<操作符对char*类型有特别的重载,可以输出字符串内容
[/Quote]

正解。
justkk 2011-01-28
  • 打赏
  • 举报
回复
用printf,没有二义性
昵称很不好取 2011-01-28
  • 打赏
  • 举报
回复
p是char*,而p2是int*类型,因此解释不一样,将p转换为void*类型也会输出一个地址
mstlq 2011-01-28
  • 打赏
  • 举报
回复
string是一个class,不能简单理解成字符数组。
再说,楼主这里的不是string而是char*,cout的<<操作符对char*类型有特别的重载,可以输出字符串内容

64,647

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧