C 在整数变量中存储字符

C 在整数变量中存储字符,c,C,困惑的是,当我编译时,当hold是整数时,为什么这样做有效 char value = 'p'; int hold = value; printf("%c", hold); 首先,在 int hold = value; 执行从char到int的隐式转换 第二,在 printf("%c", hold); %c说明符表示将其转换为char并将其作为符号打印。首先,在 int hold = value; 执行从char到int的隐式转换 第二,在 printf("%c", hold); %c说

困惑的是,当我编译时,当hold是整数时,为什么这样做有效

char value = 'p';
int hold = value;
printf("%c", hold);
首先,在

int hold = value;
执行从
char
int
的隐式转换

第二,在

printf("%c", hold);

%c
说明符表示将其转换为
char
并将其作为符号打印。

首先,在

int hold = value;
执行从
char
int
的隐式转换

第二,在

printf("%c", hold);


%c
说明符意味着将其转换为
char
并将其作为符号打印。

对ASCII进行一些研究:)
%c
printf
要求
int
。你看,既然
'p'
是一个整数,你真的应该问为什么
字符值='p'
有效!仍然编译时没有警告@iehrlichASCII值是112,当我使用%d时,我理解。但是为什么编译器允许我将一个字符存储在int中并作为一个字符打印出来呢@GamDo做了一些关于ASCII的研究:)
%c
printf
需要
int
。你看,既然
'p'
是一个整数,你真的应该问为什么
字符值='p'
有效!仍然编译时没有警告@iehrlichASCII值是112,当我使用%d时,我理解。但是为什么编译器允许我将一个字符存储在int中并作为一个字符打印出来呢@GamThe
%c
说明符告诉
printf()
需要类型为
char
的参数;未进行任何转换(在默认参数升级之外),不匹配的转换说明符和参数会导致未定义的行为。值得注意的是,
char
是一种整数类型。@DavidBowling
%c
需要一个
int
类型的参数。是7.21.6.1 fprintf函数p8 c如果不存在l长度修饰符,int参数将转换为无符号字符,并写入结果字符。“表示将其转换为char。”很接近。最好在调用原型末尾带有省略号的函数(例如
print()
)时合并与省略号对应的所有参数,这样
float
值将转换为
double
,小于
int
的类型将转换为
int
。标准中的措辞很复杂,但这意味着调用
printf()
时,
char
会自动转换为
int
。这就是为什么
printf()
的规范说
%c
将转换为
无符号字符的
int
打印为字符的原因。
%c
说明符告诉
printf()
需要类型为
char
的参数;未进行任何转换(在默认参数升级之外),不匹配的转换说明符和参数会导致未定义的行为。值得注意的是,
char
是一种整数类型。@DavidBowling
%c
需要一个
int
类型的参数。是7.21.6.1 fprintf函数p8 c如果不存在l长度修饰符,int参数将转换为无符号字符,并写入结果字符。“表示将其转换为char。”很接近。最好在调用原型末尾带有省略号的函数(例如
print()
)时合并与省略号对应的所有参数,这样
float
值将转换为
double
,小于
int
的类型将转换为
int
。标准中的措辞很复杂,但这意味着调用
printf()
时,
char
会自动转换为
int
。这就是为什么
printf()
的规范说
%c
将转换为
无符号字符的
int
打印为字符的原因。