gpt4 book ai didi

c - 杂项函数在 C 中经历隐式转换?

转载 作者:行者123 更新时间:2023-12-04 08:12:59 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Using scanf for reading an unsigned char

(2 个回答)



Default argument promotions in C function calls

(3 个回答)



default argument promotions and relevance of "%c" in printf

(1 个回答)



Default argument and parameter promotions in C

(1 个回答)


去年关闭。




好吧,函数原型(prototype)参数做了隐式转换,我想知道在这个例子中是否也有隐式转换?如果没有转换,为什么会发生?由于还有哪些其他函数原型(prototype)进行了这种转换?

#include <stdio.h>

int main(void)
{
unsigned char a;
scanf("%d", &a); // conversion implicit or not ?
printf("a = %d\n", a); // conversion implicit or not ?
return 0;
}

最佳答案

scanf 的变量参数和 printf只会经历默认参数提升 .这意味着 float 类型的参数被提升为类型 double和小于 int 的整数类型将晋升为int .请注意,这不适用于指针。
scanf 的情况下, %d格式说明符需要 int *但是你传递了 unsigned char * .这些类型不兼容,所以你有 undefined behavior .
printf 的情况下, %d预计 int . unsigned char你传入的晋升为int所以在这种情况下它是有效的。

关于c - 杂项函数在 C 中经历隐式转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65860165/

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