C 在整数变量中存储字符
困惑的是,当我编译时,当hold是整数时,为什么这样做有效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说
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
打印为字符的原因。