请教一个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?
...全文
78 9 打赏 收藏 转发到动态 举报
写回复
用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禁止的
C语言课程设计是一个旨在帮助学生深入理解和应用C语言编程的实践项目。以下是一些关于C语言课程设计的基本步骤和建议: 明确目标和需求:首先,你需要与授课教师或课程设计的相关人员沟通,明确课程设计的需求。这包括了解课程设计的主题、目标以及需要解决的问题。这将有助于你确定设计的范围和方向。 选择项目主题:选择一个与C语言相关的项目主题。例如,你可以设计一个学生成绩管理系统、一个简单的文本编辑器或一个游戏等。确保所选主题既具有挑战性又能够展示你的C语言编程技能。 进行问题分析:一旦确定了项目主题,你需要对问题进行深入分析。这包括确定问题的输入和输出、理解问题的要求和限制条件,以及将复杂问题分解为更小的子问题。这将有助于你更好地理解和解决问题。 设计算法和数据结构:针对项目需求,设计合适的算法和数据结构。这包括确定如何存储和处理数据、如何设计函数和模块等。 编写代码:使用C语言编写代码,实现项目功能。注意遵守C语言的语法规则,确保代码的可读性和可维护性。 测试和调试:在编写完代码后,进行测试和调试。确保代码能够正确运行并满足项目需求。使用调试工具和技术来查找和修复代码中的错误。 文档编写:编写项目文档,包括项目说明、功能介绍、代码注释等。这将有助于其他人理解你的项目并复用你的代码。 提交和展示:最后,将你的课程设计项目提交给教师或相关人员,并在课堂上进行展示。展示时可以介绍项目的功能、实现过程以及遇到的挑战和解决方案等。 在进行C语言课程设计时,还需要注意以下几点: 遵守编程规范,包括变量命名、代码缩进、注释等。 充分利用C语言的特点和优势,如指针、结构体、文件操作等。 注重实践和应用,通过解决实际问题来加深对C语言的理解和应用能力。 在遇到困难时,及时向教师或同学请教,并查阅相关资料和文档。 通过以上步骤和建议,你可以完成一个高质量的C语言课程设计项目,并提升自己的编程能力和实践经验。

69,382

社区成员

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

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