#include union utype { int i; double x; }s1,s2,*p=&s1; void main() { s1.x=123.4; s1.#include union utype{\x05int i;\x05double x;}s1,s2,*p=&s1;void main(){\x05s1.x=123.4;\x05s1.i=100;\x05int x=sizeof(s2);int y=sizeof(s1);int z=sizeof(*p);\x05printf("%

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/17 10:01:05
#include union utype { int i; double x; }s1,s2,*p=&s1; void main() { s1.x=123.4; s1.#include union utype{\x05int i;\x05double x;}s1,s2,*p=&s1;void main(){\x05s1.x=123.4;\x05s1.i=100;\x05int x=sizeof(s2);int y=sizeof(s1);int z=sizeof(*p);\x05printf(
xTmOP+7..`QR`/:0iJce)!LXb B+2̽};텮/f47<& ^xKgPN *"^E'hI/d[!) , 3`A i[NY$v=$Ut`UUׅTsoH<O4}L)Lct

#include union utype { int i; double x; }s1,s2,*p=&s1; void main() { s1.x=123.4; s1.#include union utype{\x05int i;\x05double x;}s1,s2,*p=&s1;void main(){\x05s1.x=123.4;\x05s1.i=100;\x05int x=sizeof(s2);int y=sizeof(s1);int z=sizeof(*p);\x05printf("%
#include union utype { int i; double x; }s1,s2,*p=&s1; void main() { s1.x=123.4; s1.
#include
union utype
{
\x05int i;
\x05double x;
}s1,s2,*p=&s1;
void main()
{
\x05s1.x=123.4;
\x05s1.i=100;
\x05int x=sizeof(s2);
int y=sizeof(s1);
int z=sizeof(*p);
\x05printf("%d %d %d %d\n",s1.x,x,y,z);
}
为什么 y,z都是8 x不等于8?x的输出=1079957913
可是
#include
union utype
{
\x05int i;
\x05double x;
}s1,s2,*p=&s1;
void main()
{
\x05int x=sizeof(s2);
int y=sizeof(s1);
int z=sizeof(*p);
\x05printf("%d %d %d %d\n",x,y,z);
}
这时候x y z又都是8了
到底是什么原因呢 我知道从字面看是赋值引起的 就是求下解释

#include union utype { int i; double x; }s1,s2,*p=&s1; void main() { s1.x=123.4; s1.#include union utype{\x05int i;\x05double x;}s1,s2,*p=&s1;void main(){\x05s1.x=123.4;\x05s1.i=100;\x05int x=sizeof(s2);int y=sizeof(s1);int z=sizeof(*p);\x05printf("%
printf("%d %d %d %d\n",s1.x,x,y,z);
第二个%d本意输出一个int类型长度,然而s1.x是double长度,则这的double的低四位将覆盖掉后面x所需要的4位,当字节截断时,输出的时double,即是s1.x的低4位的int值