gpt4 book ai didi

c - 当我们尝试将字符打印为 float 和十六进制时,为什么 printf 的行为不同?

转载 作者:行者123 更新时间:2023-11-30 16:45:21 25 4
gpt4 key购买 nike

我尝试在 printf 中将字符打印为 float 并得到输出 0。这是为什么。
另外:

char c='z';
printf("%f %X",c,c);

给出了一些奇怪的十六进制输出,而当我这样做时输出是正确的:

printf("%X",c); 

为什么会这样?

最佳答案

printf() 函数是一个可变参数函数,这意味着您可以向其传递可变数量的未指定类型的参数。这也意味着编译器不知道函数需要什么类型的参数,因此它无法将参数转换为正确的类型。 (如果您使用 printf 的参数错误,并且使用足够的警告标志来调用它,现代编译器会警告您。)

由于历史原因,您无法将级别小于 int 的整数参数或级别小于 double 的浮点类型传递给可变参数函数。 float 将转换为 doublechar 将转换为 int(或 unsigned int 在奇怪的实现上)通过一个称为“默认参数升级”的过程。

printf解析其参数时(参数传递给函数,参数是函数接收的内容),它使用任何内容检索它们方法适用于格式字符串指定的类型。 "%f" 说明符需要一个 double"%X" 说明符需要一个 unsigned int

如果您传递 intprintf 尝试检索 double,则会调用未定义的行为。< br/>如果您传递 int 并且 printf 尝试检索 unsigned int,则会调用未定义的行为

未定义的行为可能包括(但不限于)打印奇怪的值、使程序崩溃或(其中最阴险的)完全按照您的预期进行。

来源:n1570 (当前C标准的最终公开草案)

关于c - 当我们尝试将字符打印为 float 和十六进制时,为什么 printf 的行为不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44131462/

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