gpt4 book ai didi

c - Union 在使用不同的格式说明符时表现不同

转载 作者:行者123 更新时间:2023-11-30 14:36:59 25 4
gpt4 key购买 nike

#include <stdio.h>
union p{
int x;
char y;
};
int main(){
union p a;
a.y = 60;
a.x = 12;
printf("%f ",a.y);
printf("%d ",a.y);
printf("%d",a.x);
}

上面的输出是 0.000000 和 12 和 12,但我认为它一定是 12 和 12 和 12 有人可以解释一下。

最佳答案

a.y 是一个字符,但这里

printf("%f ",a.y);

您将其打印为double。这是未定义的行为,即您可以获得任何类型的输出。

始终使用正确的格式说明符。

确保遵守编译器警告!对于海湾合作委员会我得到

main.cpp: In function 'main':
main.cpp:12:10: warning: format '%f' expects argument of type 'double', but argument 2 has type 'int' [-Wformat=]
12 | printf("%f ",a.y);
| ~^ ~~~
| | |
| | int
| double
| %d

这表明有些事情出了问题。

如果将代码更改为

#include <stdio.h>
union p{
int x;
char y;
float z;
};

int main(){
union p a;
a.y = 60;
a.x = 12;
printf("%.200f ",a.z);
printf("%d ",a.y);
printf("%d",a.x);
}

代码成为有效的 C 代码并给出以下结果:

0.00000000000000000000000000000000000000000001681558157189780485108475499947899357536314330251818926108481940667749299223032721783965826034545898437500000000000000000000000000000000000000000000000000000 12 12

在大多数小端机器上。

关于c - Union 在使用不同的格式说明符时表现不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57679937/

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