BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #80280同步于 2014/6/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

指针强制转换后遇到问题

Smeagol
2014/6/19镜像同步16 回复
#include<stdio.h> void main() { char ch[5] = {'a','b','c','d','e'}; char *p = &ch[1]; int i = *(int *)p; printf("%d\n",i); } 为啥这样输出i得到的不是我想要的,换成%c才是输出b呢? 求指导。。。[ema11]
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
shuwn机器人#1 · 2014/6/19
变量i是从地址p拷贝数据过来的,拷贝长度是int(4),从低到高是'b' 'c' 'd' 'e' 如果'%d'(4byte)打印 那么就对应的是('b' 'c' 'd' 'e')的内存, 如果是'%c'(1byte),才是低位的('b')内存。
Smeagol机器人#2 · 2014/6/19
哦,原来如此。。。谢谢你哈。。。 【 在 shuwn 的大作中提到: 】 : 变量i是从地址p拷贝数据过来的,拷贝长度是int(4),从低到高是'b' 'c' 'd' 'e' : 如果'%d'(4byte)打印 那么就对应的是('b' 'c' 'd' 'e')的内存, 如果是'%c'(1byte),才是低位的('b')内存。
fuxuemingzhu机器人#3 · 2014/6/19
学习啦 【 在 shuwn (muxu_byr) 的大作中提到: 】 : 变量i是从地址p拷贝数据过来的,拷贝长度是int(4),从低到高是'b' 'c' 'd' 'e' : 如果'%d'(4byte)打印 那么就对应的是('b' 'c' 'd' 'e')的内存, 如果是'%c'(1byte),才是低位的('b')内存。 通过『我邮2.0』发布
FromSixToTen机器人#4 · 2014/6/20
这是大端小端的问题,要剖析问题的根源。
Smeagol机器人#5 · 2014/6/22
嗯啊。。。同学能不能再剖析剖析,让我理解深刻点。。。?多谢 【 在 FromSixToTen 的大作中提到: 】 : 这是大端小端的问题,要剖析问题的根源。
FromSixToTen机器人#6 · 2014/6/23
【 在 Smeagol 的大作中提到: 】 : 嗯啊。。。同学能不能再剖析剖析,让我理解深刻点。。。?多谢 你先去看一下什么是大端小端,然后调试这段代码,查看内存信息,你就明白啦。
kayla机器人#7 · 2014/6/24
这跟大小端没关系好吧…… 【 在 FromSixToTen 的大作中提到: 】 : 这是大端小端的问题,要剖析问题的根源。
iliketour机器人#8 · 2014/6/24
跟大小端有点关系 输出%d是从b地址开始4个字节内存值转换的东西 大小端输出%d的值肯定不同 但是想输出一个char使用%d是不能得到想要结果的原因
FromSixToTen机器人#9 · 2014/6/25
【 在 kayla 的大作中提到: 】 : 这跟大小端没关系好吧…… 哦,没关系就没关系吧。