类型不同的指针可以指向同一内存单元吗?

kakulukia 2015-06-24 11:14:14
调试的时候发现一个现象,类型不同的指针能指向同一内存单元吗?这打印出来的内存地址,是计算机物理内存的实际地址,还是说是程序为每种类型分别分配的一段内存?
如下,信息为同一段程序同一时刻打印:
(lldb) print result
(char **) $9 = 0x000000010010b5f0

(lldb) print result[2]
(char *) $12 = 0x000000010010b5f0 "p\x98\x10"


另外,还有一个问题,一个char** result指针在子函数realloc后指向地址改变,然后递归回退回去后有语句要用result时调用的还是之前没有realloc的result(因为上下文保留的是原result,所以子函数realloc后虽然地址改变但回退后父函数读不到?),这种情况怎么解决?
...全文
413 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
NotSimpleEasy 2015-06-30
  • 打赏
  • 举报
回复
地址都是整形的,应该可以~
707wk 2015-06-26
  • 打赏
  • 举报
回复
可以 , 打印出来的地址应该是一样的,因为打印的是起始位置
kakulukia 2015-06-26
  • 打赏
  • 举报
回复
引用 3 楼 sunjilonggood 的回复:
你能看到的地址都是虚拟地址,计算机为每一个程序分配4G虚拟内存,就是说可能两个同时运行的程序,他们可能用相同的虚拟地址,但是物理地址是完全不一样的,指针就是保存地址的变量,所以他的值是任意的,也就是它可以指向任何位置,在程序员眼中没有类型,只有内存的概念,int a = 0x1234 5678; char* b = (char*)&a; int* c = &a;b和c指向同一个地址,只不过*b,*c的值不一样罢了
本问题的地址是同一个程序断点步进时在同一函数的同一时刻打印的。 那么照你说的,此2个地址的物理地址和虚拟地址都是相同的,只是地址0x000000010010b5f0被按照char *形式取值时,取到的值是"p\x98\x10",刚好是字符串形式所以能打印出来;而该地址被按照char **形式取值时,在"p\x98\x10"的基础上又做了一个char *取值,由于不是地址形式所以取不到内容,是这个意思吗? 那么也就是说地址0x000000010010b5f0被按照char *取值时值为"p\x98\x10",如果被按照int *取值那么就可能是11215216是么?
赵4老师 2015-06-24
  • 打赏
  • 举报
回复
Why not?
码无痕 2015-06-24
  • 打赏
  • 举报
回复
你能看到的地址都是虚拟地址,计算机为每一个程序分配4G虚拟内存,就是说可能两个同时运行的程序,他们可能用相同的虚拟地址,但是物理地址是完全不一样的,指针就是保存地址的变量,所以他的值是任意的,也就是它可以指向任何位置,在程序员眼中没有类型,只有内存的概念,int a = 0x1234 5678; char* b = (char*)&a; int* c = &a;b和c指向同一个地址,只不过*b,*c的值不一样罢了
king191923157 2015-06-24
  • 打赏
  • 举报
回复
可以,与类型无关
fly_dragon_fly 2015-06-24
  • 打赏
  • 举报
回复
指针就是地址,与类型无关, 在操作系统下一般都是虚存地址
r0am3r 2015-06-24
  • 打赏
  • 举报
回复
1.可以啊,.c++数据类型决定了数据的长度和取值范围,也就是说指向同一地址的指针根据其定义时类型,来确定应该读取的数据字节数 2.没看懂什么问题...检查下子函数的传值方式是不是用了值传递,,返回的时候被销毁了..?
lin5161678 2015-06-24
  • 打赏
  • 举报
回复
有些可以有些不行

64,637

社区成员

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

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