gpt4 book ai didi

c - 两个 union 的算术,未定义的行为?

转载 作者:行者123 更新时间:2023-12-02 20:31:20 30 4
gpt4 key购买 nike

#include <stdio.h>
#include <stdlib.h>

typedef union
{

double f;

unsigned long long u;

int long long i;
} r;

int main()
{
r var1, var2;

var1.f = -3.5;
var2.u = 3;

var1.u = var1.u + var2.u;

printf("%u", var1.u);
return 0;
}

为什么只返回 var1 的值而不返回总和?如果 var1var2 添加了相同的指定数据类型,则该方法有效。我认为 union 让这不再是问题?

最佳答案

从 union 体中与您上次分配的成员不同的成员读取数据会导致未指定的值。它不是无效的,但标准没有指定如何解析类型双关,结果可能是陷阱表示。请参阅:

Is type-punning through a union unspecified in C99, and has it become specified in C11?

union 的目的不是允许类型双关。当您知道永远不会同时需要两个不同的变量时,它可以通过为两个不同的变量重用相同的内存来节省空间。有关此功能有用的示例,请参阅:

How can a mixed data type (int, float, char, etc) be stored in an array?

(这恰好是我得票最高的答案)。

关于c - 两个 union 的算术,未定义的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21152199/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com