C 如何在内部使用printf?

C 如何在内部使用printf?,c,casting,printf,C,Casting,Printf,我一次也没问自己。我不明白它做了什么 例如: 1。代码 char a = 'h'; printf("%i", (int)a); /// Conversion 'a' to int, and again conversion to int by modifier %i. Right? printf("%i", a); 如果我是这样写的,你会说:这是错误的 2。代码 char a = 'h'; printf("%i", (int)a); /// Conversion 'a' to int, an

我一次也没问自己。我不明白它做了什么

例如:

1。代码

char a = 'h';
printf("%i", (int)a); /// Conversion 'a' to int, and again conversion to int by modifier %i. Right?
printf("%i", a);
如果我是这样写的,你会说:这是错误的

2。代码

char a = 'h';
printf("%i", (int)a); /// Conversion 'a' to int, and again conversion to int by modifier %i. Right?
printf("%i", a);
为什么,这是错误的???我们通过修饰符%i将“a”转换为int类型,并在之后输出

1和2代码之间有什么区别

这就是为什么我不能通过“cout”模拟输出C++中的简单代码?

类似于

 printf("%i", a);
 printf("%i", (int)a); 
是正确的,因为
printf()
是一个可变函数,对于它的参数,默认的参数提升规则适用,
a
将被提升为
int

像这样的代码

 printf("%i", a);
 printf("%i", (int)a); 

也是正确的,但演员阵容完全没有必要

我问自己
…什么?@SouravGhosh在标题=)这个
%I
不是一个“转换”。它是一个输出格式说明符,它告诉
printf()
如何获取特定类型的值(在本例中为
int
),并将其转换为字符,形成值的文本表示形式(在本例中为十进制diigts)。@MaximPro-“在标题中”我读过了,但我还是要回答苏拉夫的第二个问题。@StoryTeller,因为我脑子里有点混乱好吧,如果我把int换成float<代码>printf(“%f”,(float)a)
printf(“%f”,a)差异?如果printf为我做了所有事情,那么将变量转换为所需类型有意义吗?@MaximPro简言之,没有。这里不需要显式转换。阅读有关默认参数提升规则的内容,您将了解其中的原因。@MaximPro当默认提升恰好符合您的要求时,不需要显式转换,但这可能有助于使代码更易于自我记录。如果默认升级不符合您的要求,则需要显式转换类型。