以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 C/C++编程思想 』  (http://bbs.xml.org.cn/list.asp?boardid=61)
----  荤菜求助:关于结构体的小程序  (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=50664)


--  作者:荤菜
--  发布时间:7/29/2007 4:24:00 PM

--  荤菜求助:关于结构体的小程序
输入a,b,输出a,b
struct
{int i;
int j;
}date;
main()
{scanf("%d %d",&date.i,&date.j);
printf("%d %d",date);                /*书上说不能这样用,但我为什么用得好好的?*/
getch();
}
我还看到书上结构体名可以直接作为实参,比如print(date);而date不是指针,难道书上错了?
--  作者:NingBo
--  发布时间:8/16/2007 3:25:00 PM

--  
现在data是一个地址常量, 也就是说data.i,和data的地址是一样的, printf函数两个参数需要指定格式化列表里面要打印的两个东西的开始地址,你只给了一个data,第一个整形当然就打印data.i的内容,格式化列表中第二个%d 就直接打印以 data地址+sizeof(int) 的值为开始地址的内容,也就是data.j.

结构体换成struct
{int i;
float j;
}date;
的话, 打印结果,第二个数就是你输入的float类型的整数部分,也就是说,printf只打印了float的整数部分,相当于类型转换成int.

你地明白?


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
46.875ms