c++ - 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 )
解决方案
字符常量this:
'A'
是int
C 中的类型char
和 C++ 中的类型。编译器选择相应语言标准指定的类型。声明的类型的字符变量
char
总是char
1 字节大(在非外部系统上通常为 8 位)。printf("%c", some_char);
是一个可变参数函数(接受任意数量的参数)并且具有特殊的隐式类型提升规则。称为默认参数提升的东西会将传递的字符变量整数提升为int
. 在此处阅读有关整数提升的信息:隐式类型提升规则。printf
预计会发生提升,因此%c
将意味着char
根据printf
. 这在 C++ 中也适用,但应避免使用 stdio.h。printf("%d", x);
如果x
是这种情况,char
这将是未定义的行为。但在实践中,可能会发生上述整数提升,因此它会打印一个整数。另请注意,没有什么神奇的char
,它们只是 1 字节的大整数。所以它在转换之前已经有值 98。
推荐阅读
- c# - 将带有本地数据库的 winforms 应用程序传输到其他计算机
- django - 从 django 查询集中的相关对象请求附加字段
- java - 按 SQS 消息数触发 Lambda
- javascript - 如何从 url 查询字符串中保存前端的不记名令牌?ASP.NET 中的 RESTful api
- rust - 有没有办法选择两个生命中较小的一个?
- dart - 如何在颤振应用程序中返回应用程序的第一页?
- javabeans - java.lang.NullPointerException:在独立应用程序中自动装配 bean 时为空
- dom - WebDriver 不可见 DocumentFragment 元素
- android - Kotlin 从嵌套类中引用外部类
- python - 移动 app.py 和静态文件夹后,Flask 无法解析静态文件