首页 > 解决方案 > c和c++中的字符

问题描述

我要问的是(我的理解完全正确吗?)

字符 x='b'; (x 有一个值可以用两种方式表示,其中一种是int,另一种是两种语言(C 和 C++)中的char

在 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(字符)

在 C++ 中

如果我让编译器选择它将选择(将优先考虑)char值,因为 C++ 的标准使字符文字为 char(优先考虑 char 而不是 int),就像在这段代码中一样

int main(){
    printf("%d", sizeof('b'));
    return 0;}

output is:1 (char size) 这意味着编译器将 b 视为 char

但如果我在这段代码中选择,我可以使用int值

int main(){
        char x = 'b';
        printf("%d", x);
        return 0;}

输出为 98(98 是在 ASCII 码中表示 b 的 int )

标签: c++c

解决方案


  • 字符常量this:'A'intC 中的类型char和 C++ 中的类型。编译器选择相应语言标准指定的类型。

  • 声明的类型的字符变量char总是char1 字节大(在非外部系统上通常为 8 位)。

  • printf("%c", some_char);是一个可变参数函数(接受任意数量的参数)并且具有特殊的隐式类型提升规则。称为默认参数提升的东西会将传递的字符变量整数提升为int. 在此处阅读有关整数提升的信息:隐式类型提升规则

    printf预计会发生提升,因此%c将意味着char根据printf. 这在 C++ 中也适用,但应避免使用 stdio.h。

  • printf("%d", x);如果x是这种情况,char这将是未定义的行为。但在实践中,可能会发生上述整数提升,因此它会打印一个整数。另请注意,没有什么神奇的char,它们只是 1 字节的大整数。所以它在转换之前已经有值 98。


推荐阅读