#include<stdio.h>
int main(){
printf("%d\n", (int)('a'));
printf("%d\n", (char)(97));
}
为什么上面的程序会给出输出
97
97
代替
97
a
#include<stdio.h>
int main(){
printf("%d\n", (int)('a'));
printf("%d\n", (char)(97));
}
为什么上面的程序会给出输出
97
97
代替
97
a
#include<stdio.h>
int main(){
printf("%d\n", (int)('a'));
printf("%c\n", (char)(97));
}
char
是整数类型(与 , 等相同int
),只有范围不同long
。long long
%d
printf 整数,字符常量'a'
的类型int
和值97
在ASCII
.
您的示例中不需要强制转换:
#include<stdio.h>
int main(){
printf("%d\n", 'a');
printf("%c\n", 97);
}
97
,0x61
并且'a'
只是产生相同int
值的不同方式(至少在基于 ASCII 的机器上)。
Andchar
只是另一种整数类型,因此将值转换为 achar
不会有帮助。
要将该值打印为a
,请使用%c
。
#include <stdio.h>
int main(void) {
printf("%d\n", 97); // 97
printf("%d\n", 'a'); // 97
printf("%c\n", 97); // a
printf("%c\n", 'a'); // a
}
在第二次调用中,您尝试使用转换说明符将字符输出为整数%d
。
printf("%d\n", (char)(97));
相反,您可以只使用转换说明符编写%c
printf("%c\n", 97);
在这种情况下,不需要铸造。
即使你会写也要注意这一点
printf("%c\n", (char)(97));
或者
char c = 'a';
printf("%c\n", c);
int
然而,由于整数提升,第二个参数表达式将被提升为类型。
同样在 C 整数字符常量中,如'a'
具有类型int
.
因为你需要在最后一行写 %c,而不是 %d。
printf("%d\n", (char)(97));
至
printf("%c\n", 97);
您想要的是打印一个字符,但是在您的第二个 printf 调用中您指定 format%d
而不是%c
,然后 printf 将您输出(char)(97)
为整数。