This topic has been archived. It cannot be replied.
-
工作学习 / 专业技术讨论 / 标准C的问题, 解释一下结果#include "stdafx.h"
int i=20;
int cube(int i) {
return i*i*i;
}
int _tmain(int argc, _TCHAR* argv[])
{
union
{
int a;
int b;
}dir;
dir.a = 12;
dir.b = 13;
int i=10;
printf("%d\n", cube(i));
printf("%d\n", dir.a+dir.b);
system("pause");
return 0;
}
运行结果是1000
26
-samuelhao(samuel);
2007-1-30
{349}
(#3467374@0)
-
小儿科,你知道什么是union
{
int a;
int b;
}dir;吗??
-eagle_no1(瞎起哄);
2007-1-30
(#3467381@0)
-
模模糊糊,为什么是26?
-samuelhao(samuel);
2007-1-30
(#3467404@0)
-
你这学习态度也太糟了吧. 这是教科书里的最基本概念, 随便翻本书就知道了.
-dusk(~小桥流水~);
2007-1-30
(#3467432@0)
-
this union here only has 4 bytes space ether interpret as a OR b; and you have globe i and local
i, the compiler take the local i in the case.
-eagle_no1(瞎起哄);
2007-1-30
(#3467435@0)
-
以前只知道共享内存, 开来还是没真正理解。 多谢
-samuelhao(samuel);
2007-1-30
(#3467459@0)
-
union就是多位一体。一个家伙有多个名字。a和b只是一个存储地址的不同名字而已。或者说&(dir.a) == &(dir.b)
-iunknown(Internet);
2007-1-31
(#3468431@0)
-
你现在还没有理解共享内存共享内存和union是完全不同的两码事。
联合是联合,任何一本C入门读物上都有介绍
共享内存是IPC的一个机制,你可以google下IPC 共享内存来看看。
-xxjjs(东方射日);
2007-2-1
{137}
(#3471503@0)
-
同意, 还真没理解好我把union该了, 现在结果为什么不是26.0呢?
union
{
int a;
float b;
}dir;
dir.a = 12;
dir.b = 13.0;
printf("%f ", dir.a+dir.b);
-samuelhao(samuel);
2007-2-2
{143}
(#3473292@0)
-
dir.a+dir.b == *(int*)&(dir.b) + dir.b 如果真有人写出这种code,而且还能很好的运行。真是Write Unmaintainable Code 的高手。找到rolia一个漏洞,回复过的帖子也可以修改。
-iunknown(Internet);
2007-2-2
(#3473298@0)
-
晕,让他看看type cast的章节,要不说了用处也不大
-laoliang(老亮);
2007-2-2
(#3473303@0)
-
wk! i fu le you!
-ice(阏);
2007-2-2
(#3473321@0)
-
我真服了你了!!你先了解下int和float在系统中的存储方式吧。
建议你从C++入门看起,否则你写出这种程序去面试立即被毙了!
上面的问题,建议你改写成以下方式:
union {
float f;
int i;
char ch[4]; // 32位OS,如果64位OS写成 char ch[8]
} dir;
然后你给f赋不同的数,观察i和ch[]的变化
-xxjjs(东方射日);
2007-2-2
{279}
(#3473770@0)
-
C++入门?? too much for him. he needs to read "The C Programming Language"
-ice(阏);
2007-2-2
(#3473782@0)
-
你这个SENIOR,居然教起小学生啦.让我教教你.以后你看见谁敢在系统级别的程序中用UNIION,直接毙掉,基本没有错.
-iwantcar(恶疾,时日无多,戒网);
2007-1-31
(#3468178@0)
-
为什么
-laoliang(老亮);
2007-1-31
(#3468189@0)
-
你SEARCH一下MS的代码库.我相信没有.当然,MS经过多年的发展,估计收入了不少垃圾.
-iwantcar(恶疾,时日无多,戒网);
2007-1-31
(#3468196@0)
-
Win32 API中就有很多Union呀。
-collapsar(笨笨和旦旦.IMMANUEL);
2007-2-3
(#3476114@0)
-
补充一下:如果看到有人在系统中已经用了union,马上毙掉自己!
-647i(流浪的步行万里);
2007-1-31
(#3468190@0)
-
放在这里,我等知音.
-iwantcar(恶疾,时日无多,戒网);
2007-1-31
(#3468194@0)
-
There are unions in definitions of IPv4 and IPv6 headers.
-dpff(dpff);
2007-1-31
(#3468375@0)
-
microsoft driver级别很多union。主要是为了省内村。
-iunknown(Internet);
2007-1-31
{6095}
(#3468440@0)
-
楼上的.这个UNION很多陷阱的.估计大伙还没有遇到.特别是在不同PROCESSOR之间用的时候.
我昨晚说话没有详细考虑,在接口的地方,用一下也是可以的.虽然看着很让我讨厌,很难跟踪维护.
-iwantcar(恶疾,时日无多,戒网);
2007-1-31
(#3470192@0)