首页 新闻 会员 周边 捐助

c++如何获取对象地址,又如何从地址转成对象?

0
悬赏园豆:10 [已解决问题] 解决于 2022-12-06 11:12

比如下面的代码,最好能有对于任意类型的方法:

const char *a = "fasdfasdfsadf";

    long addr = (long)(std::addressof(a));

    cout << "address of a:" << addr << endl;

    const char *b = (const char *)addr;
    
    cout << b << endl;   //这句不能正确输出字符串内容,报错了
问题补充:

我需要可以进行序列化的地址,也就是可以转成16进制的地址

空明流光的主页 空明流光 | 初学一级 | 园豆:111
提问于:2022-12-05 13:50
< >
分享
最佳答案
0

addr = std::adressof(a)
你拿 到的addr。 是指针a的 地址。并不字符串的地址。所以你不能正确打印.

传给addressof的应该是对象本身,而不能是对象的指针。它接受一个参数,该参数为要获得地址的那个对象的引用.

如果 想要对任意类型都可用的方法,你需要 对addressof进行特化。
目前 addressof 特化了。object跟非object.
如果 要对指针也适用。需要 特化它。

收获园豆:10
会游泳的骆驼 | 菜鸟二级 |园豆:292 | 2022-12-05 17:30

能给个例子吗?

空明流光 | 园豆:111 (初学一级) | 2022-12-06 09:57

@空明流光: 你这个例子其实我觉的你没有理解指针的意思

  1. addr是 a的地址。
  2. a里面存放的是字符串的地址。
    ==>所以 addr != 字符串的地址。
  3. 用addr 赋值给b. 那b里面存的就是 a的地址。

最后打印的b。 就是打印a的地址。 这并不能打印出字符串。
如果 你想打印字符串。应该要用字符串的地址。

会游泳的骆驼 | 园豆:292 (菜鸟二级) | 2023-06-12 18:11
其他回答(2)
0

风风雨雨,至今依然鼎力在这个行业的顶峰,就是因为有这么多的客户一直的信任和支持。致力打造真正公平、公正的经营理念,为更多客户玩的开心管网TL3210点com、玩得放心。

梦紫琪 | 园豆:202 (菜鸟二级) | 2022-12-05 18:55
0

用其它方案解决

空明流光 | 园豆:111 (初学一级) | 2022-12-06 11:11
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册