如何输出字符串常量地址?

xiaofengzzz 2010-10-09 09:56:18
字符串常量是静态分配的,两个同样的字符串常量是否被分配在一起,这一点由实现确定:

const char* p = "heraclilus";
const char* q = "heraclilus";

if ( p == q )
std::cout << "one!\n";
else
std::cout << "two!\n";

以上在我的机器上 输出是:

one! //环境: Mac 10.5 / GCC

但当我做以下操作的时候,我便产生了一个想法:

std::cout << p << std::endl
<< q << std::endl;

输出:
heraclilus
heraclilus

if ( p == q ) 比较的是 heraclilus 的地址吗?安照前面书上学的 *p / p 的函义,应该是。

于是问题来了,std::cout 对 p 做了特殊的操作吗?让其显示的不是 p 所指向的 地址(&) ,而是 p 所指向地址的内容(heraclilus)。

我想输出 p / q 所指向的地址,应该怎么办?

如果我讲的不明白的话,我再重述下我的问题:

想输出 p / q 后得到的结果不要是:

heraclilus
heraclilus

而是想要

0xbffffa80 //地址
...全文
598 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaofengzzz 2010-10-09
  • 打赏
  • 举报
回复
多谢楼上的各位,给我的帮助,

但C的print看不明白,没学过,

cout << static_cast<void *>(p) << "\n";

和arong1234兄台的解说让我知道了,不过由于字符串常量,所以要:

std::cout << static_cast<void *>(const_cast<char *> (p)) << "\n";

就OK了,多谢大家 ,结贴

arong1234 2010-10-09
  • 打赏
  • 举报
回复
字符串的地址是特殊的,如果要输出地址,强制类型转换成void*即可
ayw215 2010-10-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 justkk 的回复:]

printf("%p\n%p\n", p, q);
[/Quote]
可以结贴了
Jim_King_2000 2010-10-09
  • 打赏
  • 举报
回复
cout << static_cast<void *>(p) << "\n";
justkk 2010-10-09
  • 打赏
  • 举报
回复
printf("%p\n%p\n", p, q);

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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