【发布时间】:2021-08-13 05:57:52
【问题描述】:
我问的是(我的理解完全正确吗?)
字符 x='b'; (x 有一个值可以用两种方式表示,一种是 int,另一种是 char 在两种语言 (C 和 C++))
在 C 中
如果我让编译器选择它将选择(将优先考虑) int 值,因为 C 的标准使字符文字为 int(优先考虑 int 而不是 char),就像这样代码
int main(){
printf("%d", sizeof('b'));
return 0;}
输出为:4 (int size),表示编译器首先将 b 视为 98,然后将其大小设为 int
但如果我在此代码中选择,我可以使用 char 值
int main(){
char x = 'b';
printf("%c", x);
return 0;}
输出为:b (char)
在 C++ 中
如果我让编译器选择它将选择(将优先考虑) char 值,因为 C++ 的标准使字符文字为 char(优先考虑 char 而不是 int),就像这样代码
int main(){
printf("%d", sizeof('b'));
return 0;}
输出为:1(字符大小),表示编译器将 b 视为字符
但如果我在此代码中选择,我可以使用 int 值
int main(){
char x = 'b';
printf("%d", x);
return 0;}
输出为 98(98 是 ASCII 码中表示 b 的 int)
【问题讨论】:
-
除了
printf("%d", sizeof('b');不是有效的 C 或 C++ 代码(printf调用没有结束括号)之外,您还发送带有int格式说明符的printf的size_t参数,这是错误的。%zu是正确的说明符。 -
问题是什么?
-
类型的大小与其属性之间没有任何关系。
char只是另一个整数类型,例如int -
你的理解是正确的。在 C 中(以及在 C++ 中相关的地方),所有字符值都被读取为
unsigned char转换为int。请参阅“返回值”下的man 3 fgetc。unsigned char是您的 ASCII 码。通过将大小写为int,函数返回值可以与int值(例如EOF)进行有效比较。因此'b'的unsigned char值是98,您可以在ASCII 表中看到。像fgetc()这样的函数转换为int以方便返回检查。在printf("%d", x);中,x被隐式转换为int,最好使用%hhu。 -
字符文字是 C 中的 int 和 C++ 中的 char。