我是C编程的新手,所以请原谅任何编码失误等等。
我有一个联合定义,如下所示:
union meh {
double foo;
char bar[8];
};
然后我做这样的事情:
meh firstOne;
meh otherOne;
char blah[8];
double whatever;
firstOne.foo = 0.12345;
blah = firstOne.bar;
otherOne.bar = blah;
whatever = otherOne.foo;
我想弄清楚的是:'不管'等于0.12345吗?
(只是澄清 - sizeof(double)
在我的机器上是8个字节 - 不知道到处都是真的。)
我知道显而易见的事情就是运行它并尝试自己,但不幸的是我无法做到这一点。我也对代码背后的机制感兴趣。
非常感谢您的时间和帮助 - 非常感谢!
编辑:从目前为止的评论来看,我看起来像个白痴和blah = firstOne.bar;
应该是
strcpy(blah, firstOne.bar);
代替。对不起!
答案 0 :(得分:3)
是的,如果你修正错误,whatever
将是0.12345
。如果你自己测试一下,这里有一些去了化的示例代码:
#include <assert.h>
#include <string.h>
// use more descriptive names
union d2b
{
double value;
char bytes[sizeof (double)]; // avoid magic numbers
};
int main(void)
{
const double TEST_VALUE = 0.12345;
// don't omit the union keyword in C (not necessary in C++)
union d2b src, dest;
src.value = TEST_VALUE;
// arrays are not lvalues, ie you can't assign to array variables
// use memcpy() instead of strcpy() for arbitrary binary data
memcpy(dest.bytes, src.bytes, sizeof dest.bytes);
// assert, the foundation of test-driven development in C
assert(dest.value == TEST_VALUE);
return 0;
}
答案 1 :(得分:2)
我认为blah = firstOne.bar
不会编译 - 你试图复制一个它不喜欢你做的整个数组。您需要使用memcpy
来复制所有数组数据。但是你说DID这样做(在两个地方你都试图复制char数组),我会说whatever
将最终等于0.12345。
答案 2 :(得分:0)
制作:
union meh {
double foo;
char bar[ sizeof(double) ];
};