在C语言中printf("%d",sizeof('A'));得到的结果是4;
而在C++的编译器上运行的结果却是1;
是编译器进行了怎样的改变,
还是语言标准有了变化。
printf时类型提升
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
关注 引自免费微信小程序:皆我百晓生
在C语言和C++中,字符常量(例如 'A')被存储为整数类型,具体来说通常是
unsigned char
类型。然而,在不同的上下文中,字符常量可能会经历类型提升(type promotion)。类型提升的规则因语言版本和编译器实现而异。让我们分别看看C语言和C++中的情况。C语言
在C语言中,
sizeof
操作符用于计算其操作数的字节数。对于内置类型,它返回的是字节大小。当sizeof
应用于字符常量时,由于字符常量会被提升到一个更大的整数类型(通常是最小的整数类型,即int
),所以输出结果会是int
类型的字节数,这通常是4个字节,因此在大多数情况下你会看到输出为4。示例代码:
#include <stdio.h> int main() { printf("%zu", sizeof('A')); return 0; }
在这个例子中,我将
%d
替换为%zu
,因为sizeof
返回的是size_t
类型,这是一个无符号整数类型,使用%zu
可以正确地打印出它的值。C++
在C++中,
sizeof
的行为与C语言类似,但对字符常量的处理略有不同。C++标准规定,sizeof
应该返回字符类型的字节数,而不是字符常量提升后的整数类型的字节数。因此,如果你在C++中使用sizeof('A')
,结果应该是1,因为它是在计算字符类型的字节数,而非提升后的整数类型。示例代码:
#include <iostream> int main() { std::cout << sizeof('A'); return 0; }
在这个C++的例子中,我们使用了
<iostream>
和std::cout
来替代printf
输出。总结一下,C语言和C++之间的主要区别在于它们如何解释
sizeof
对于字符常量的操作。C语言会将字符常量提升到int
类型并返回int
类型的字节数,而C++则会直接返回字符类型的字节数。这是因为两种语言的设计决策和标准的不同。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 LLM accuracy检测
- ¥15 pycharm添加远程解释器报错
- ¥15 如何让子窗口鼠标滚动独立,不要传递消息给主窗口
- ¥15 如何能达到用ping0.cc检测成这样?如图
- ¥15 关于#DMA固件#的问题,请各位专家解答!
- ¥15 matlab生成的x1图不趋于稳定,之后的图像是稳定的水平线
- ¥15 请问华为OD岗位的内部职业发展通道都有哪些,以及各个级别晋升的要求
- ¥20 微信小程序 canvas 问题
- ¥15 系统 24h2 专业工作站版,浏览文件夹的图库,视频,图片之类的怎样删除?
- ¥15 怎么把512还原为520格式