请教一个C问题

xuanxiao_ningjing 2009-06-30 08:47:24
#include <stdio.h>
int main() {
unsigned char a[]={1,2,3,4,5,6,7,8};
unsigned int *p=(unsigned int *)a+1;
printf("%x\n",*p);
}
输出的答案我理解不了,为什么是 8070605?
...全文
81 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
rekobill 2010-05-14
  • 打赏
  • 举报
回复
6楼正解~字节序问题~~
d419192480 2009-10-22
  • 打赏
  • 举报
回复
a[] : 01 02 03 04 05 06 07 08
这怎么理解???????
amossavez 2009-06-30
  • 打赏
  • 举报
回复
1楼解释的很明白了
你要注意char数组的储存问题以及大小端问题!!!
nadoo 2009-06-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xuanxiao_ningjing 的回复:]
我并不是不理解指针+1
我的理解是:当a强制转换成unsigned int后,a+1后p指向5(因为这里姑并认为unsigned int为4个字节),那么printf("%x\n",*p); 应该是输出5678啊
为什么是8070605?
[/Quote]
http://baike.baidu.com/view/2194385.htm
LITTLE-ENDIAN
xuanxiao_ningjing 2009-06-30
  • 打赏
  • 举报
回复
我并不是不理解指针+1
我的理解是:当a强制转换成unsigned int后,a+1后p指向5(因为这里姑并认为unsigned int为4个字节),那么printf("%x\n",*p); 应该是输出5678啊
为什么是8070605?
lpf000 2009-06-30
  • 打赏
  • 举报
回复
kankan
Walf_ghoul 2009-06-30
  • 打赏
  • 举报
回复
[Quote=引用楼主 xuanxiao_ningjing 的帖子:]
#include <stdio.h>
int main() {
unsigned char a[]={1,2,3,4,5,6,7,8};
unsigned int *p=(unsigned int *)a+1;
printf("%x\n",*p);
}
输出的答案我理解不了,为什么是 8070605?
[/Quote]

a代表的是数组的首地址,unsigned int *p=(unsigned int *)a+1;这句定义个指针p,存放的是数组的首地址地址加一,为了类型相容,将a转换成unsigned int *类型的,所以这里的加1,加的是unsigned int 所占的字节数.定义的数组是usigned char型,但*p将p指向后的sizeof(unsigned int)个字节,按照unsigned int 型解释。
nadoo 2009-06-30
  • 打赏
  • 举报
回复
低字节->高字节
01 02 03 04 05 06 07 08
p

Little-Endian
*p = 0x08070605
itegel84 2009-06-30
  • 打赏
  • 举报
回复
a[] : 01 02 03 04 05 06 07 08
p = a + 4 : 05 06 07 08

p 是unsingned int类型的,所以+1等于a(数组首地址)加4.

p.s.打印出来的是16禁止的

70,020

社区成员

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

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