为什么指向同一块内存区的两种类型指针所对应的值却会不同?

daodanguinet 2003-02-18 01:32:22
int main()
{
char Mychar='H';
char* p=&Mychar;
int* ptr=(int*)p;
return 0;
}
-------------------------
F5单步跟踪到 return 0; 在肯定了ptr和p所指地址都是0x0012ff7c的情况下,发现*ptr的值是'H',而*p的值却是 -858993592?
请问为什么在ptr和p指向同一块内存区的前提下,*ptr和*p的值却会不同?
...全文
113 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
allen1981813 2003-02-18
  • 打赏
  • 举报
回复
尺寸不一样
wobuzai 2003-02-18
  • 打赏
  • 举报
回复
一个是0x48,一个是0xCCCCCC48

0012FF7C 48 CC CC CC C0 FF 12 00
wshcdr 2003-02-18
  • 打赏
  • 举报
回复
因为两个指针是不同类型的

一个是指向int(四字节)的

一个是指向char(一字节)所以里面的内容当然不一样

daodanguinet 2003-02-18
  • 打赏
  • 举报
回复
字打错了,应该是:
楼上的兄弟,你还有疑惑没?
如果没有我晚上来结帖,谢谢各位的帮助。。
daodanguinet 2003-02-18
  • 打赏
  • 举报
回复
楼上的兄弟,你还有以后了没?
如果没有我晚上来结帖,谢谢各位的帮助。。
cenlmmx 2003-02-18
  • 打赏
  • 举报
回复
我也有这个疑惑!
Zark 2003-02-18
  • 打赏
  • 举报
回复
楼主对数据的含义有些模糊的认识,举例来说:

数据: sun
中国人看到是“孙”,英国人看到是“太阳”。所以数据本身是无意义,关键是数据的使用者认为它是什么意思。

在0x0012ff7c处有一个字节的值是'H'的ASCII值。所以对于p来说,它的*p只关心从0x0012ff7c处一个字节的值,而ptr来说,它的*ptr关心的是0x0012ff7c处四个字节的值,两者的值当然不一样了。(楼主的问题中是不是把情况写反了?)
chinajiji 2003-02-18
  • 打赏
  • 举报
回复
*ptr 从ptr指向的内存开始,取出sizeof(*ptr) = sizeof(char) = 1个字节,并将所取出的值按char解释.

*p 从pr指向的内存开始,取出sizeof(*p) = sizeof(int) = 4个字节,并将所取出的值按int解释.

Dala 2003-02-18
  • 打赏
  • 举报
回复
char为1字节;int为4字节。H后边3字节中可能有随机数字。
Riemann 2003-02-18
  • 打赏
  • 举报
回复
来晚了,up一下吧!
lcp 2003-02-18
  • 打赏
  • 举报
回复
因为你的指针类型长度不一样,所以内存块的值也不一样;虽然它们起始地址相同。
int类型比char类型要长。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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