程序结果为什么是这样呢?

eimhee 2006-10-23 12:12:18
#include <stdio.h>
main()
{
struct node

{

int a;

int b;

int c;

};

struct node s= { 3, 5,6 };

struct node *pt = &s;

printf("%d" , *(int*)pt);

}
结果输出是3,
不知道是为什么?
...全文
216 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
eimhee 2006-10-23
  • 打赏
  • 举报
回复
还有结果为什么要强制转换为(int*)呢?
就用*PT可不可以呢/
eimhee 2006-10-23
  • 打赏
  • 举报
回复
我改成这样
printf("%d" , (int*)pt);
结果为什么还是3呢?
Kusk 2006-10-23
  • 打赏
  • 举报
回复
因为s的内存布局的存储顺序是
a
b
c
所以s的首址也是a的首址,然后指针又被强制转换成了(int*),所以反引用出来的结果就是a的值,也
就是3了。
eimhee 2006-10-23
  • 打赏
  • 举报
回复
谢谢了, 说的真不错, 弄懂了,
Kusk 2006-10-23
  • 打赏
  • 举报
回复
因为printf函数中"%d"格式符规定接受的是整型值,所以要转成整数。至于你用其它类型的值传过去
会是什么后果,则是未定义的,它取决于你的C编译器是如何实现printf的,这不是我们应该关注的
范围。

70,037

社区成员

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

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