高手指点

高性能架构探索 2010-02-02 09:29:57
最近频频遇到一些不明白的问题


char *p="hello";
char *p1="hello";
const char *p2="hello";

cout << &p << &p1;
printf("%p", p);
printf("%p", p1);


网上说编译器会把p p1 p2优化为指向同一块地址
如上,我用cout出来的结果不同,用printf出来就是同一个结果,为什么
...全文
100 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2010-02-02
  • 打赏
  • 举报
回复
VC6调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
lbjfeng 2010-02-02
  • 打赏
  • 举报
回复
自己汗一个

不过还是问一句:

printf("%p", p1);
还有这种格式的????
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 steedhorse 的回复:]
你用cout打印的是p和p1的地址,而用printf打印的却是它们指向的地址(对于指针变量来说,也就是它们的“值”),一个是值,一个是地址,这怎么可能相同呢。
你把cout那行语句中的两个取地址符号“&”去掉试。
[/Quote]

已经明白了,去掉之后是hello哦,不过仍然谢谢你
晨星 2010-02-02
  • 打赏
  • 举报
回复
你用cout打印的是p和p1的地址,而用printf打印的却是它们指向的地址(对于指针变量来说,也就是它们的“值”),一个是值,一个是地址,这怎么可能相同呢。
你把cout那行语句中的两个取地址符号“&”去掉试。
taodm 2010-02-02
  • 打赏
  • 举报
回复
囧!这次楼主乌龙大了点。
pengzhixi 2010-02-02
  • 打赏
  • 举报
回复
看4楼的吧
traceless 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 pengzhixi 的回复:]
你看看你cout的是什么是两个指针自己本身的地址。而非字符串的地址。
[/Quote]
是的
adventurelw 2010-02-02
  • 打赏
  • 举报
回复
cout << (void *)p << (void *)p1;
&p不是hello的地址,而是p的地址。
stardust20 2010-02-02
  • 打赏
  • 举报
回复
不过这个问题也不太懂。。。坐等高手。。。
pengzhixi 2010-02-02
  • 打赏
  • 举报
回复
你看看你cout的是什么是两个指针自己本身的地址。而非字符串的地址。
stardust20 2010-02-02
  • 打赏
  • 举报
回复
printf("%p", p);
printf("%p", p1);
改成
printf("%p", &p);
printf("%p", &p1);
就和cout的一样了。。。

64,647

社区成员

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

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