这两个地址分别是什么?

mochen5460 2007-01-16 10:56:52

string robin("Christopher robin");
const char *pc=robin.c_str();
//习题要求打印pc的地址,答案用的是第二种,而我觉得是第一种。
cout<<&pc<<endl;
cout<<static_cast<void*>(const_cast<char*>(pc))<<endl;

看了C++ Primer相关章节,感觉还不是很明白,第一种不就是取的pc本身的地址吗?哪位高人解释一下啊?
...全文
169 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
genius_hb 2007-01-17
  • 打赏
  • 举报
回复
第二种是输出指针的值,而不是指针的地址
晨星 2007-01-16
  • 打赏
  • 举报
回复
哦,说错了,应该是第一种对。
如果是打印“pc的值”,即它所指向的字符串的首地址,那么应该用第二种。
可能出题人考虑得没那么严密的,他看到pc是个指针变量,于是就直接说“pc的地址”,其实他想说的应该是“pc所保存的那个地址”。
晨星 2007-01-16
  • 打赏
  • 举报
回复
我觉得都对。
原因是,“&p”的类型是const char** p,而标准库中的operator<<没有特别的针对const char**的重载或特化。所以,最终的结果必然是通过标准转换,调用到basic_ostream::operator<<(const void* p);

64,654

社区成员

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

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