返回信息流#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]
这是一条镜像帖。来源:北邮人论坛 / cpp / #80280同步于 2014/6/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
指针强制转换后遇到问题
Smeagol
2014/6/19镜像同步16 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
变量i是从地址p拷贝数据过来的,拷贝长度是int(4),从低到高是'b' 'c' 'd' 'e'
如果'%d'(4byte)打印 那么就对应的是('b' 'c' 'd' 'e')的内存, 如果是'%c'(1byte),才是低位的('b')内存。
哦,原来如此。。。谢谢你哈。。。
【 在 shuwn 的大作中提到: 】
: 变量i是从地址p拷贝数据过来的,拷贝长度是int(4),从低到高是'b' 'c' 'd' 'e'
: 如果'%d'(4byte)打印 那么就对应的是('b' 'c' 'd' 'e')的内存, 如果是'%c'(1byte),才是低位的('b')内存。
学习啦
【 在 shuwn (muxu_byr) 的大作中提到: 】
: 变量i是从地址p拷贝数据过来的,拷贝长度是int(4),从低到高是'b' 'c' 'd' 'e'
: 如果'%d'(4byte)打印 那么就对应的是('b' 'c' 'd' 'e')的内存, 如果是'%c'(1byte),才是低位的('b')内存。
通过『我邮2.0』发布
嗯啊。。。同学能不能再剖析剖析,让我理解深刻点。。。?多谢
【 在 FromSixToTen 的大作中提到: 】
: 这是大端小端的问题,要剖析问题的根源。
【 在 Smeagol 的大作中提到: 】
: 嗯啊。。。同学能不能再剖析剖析,让我理解深刻点。。。?多谢
你先去看一下什么是大端小端,然后调试这段代码,查看内存信息,你就明白啦。
跟大小端有点关系 输出%d是从b地址开始4个字节内存值转换的东西 大小端输出%d的值肯定不同
但是想输出一个char使用%d是不能得到想要结果的原因