C和C++关于字符字面量的不同

字面量和整数字面量 一、字面量 字面量是指C/C++源代码中直接使用的常量,字面量的意思是“一眼看上去是什么就是什么”。例如语句 int x = 10; 中10就是字面量,它相对于变量,只有一个确定的值不能改变,这个值就是它看上去的值。 C/C++中的字面量有一下几种: 1.整数,如10、123等 2.浮点数,如1.23 3.单个字符,如’a’、‘c’ 4.多个字符,如’abc’、‘abcd’(至少一个字符、至多四个... 阅读详情

在现在大多数计算机中(我的计算机就是),int变量是以4字节存储,而char型变量是以1个字节存储。这个很容易验证。但是关于char型字面量,C语言和C++语言在处理上稍有不同。

一、C语言char 字面量

如下程序:

/* char_literal_c.c */
#include <stdio.h>
#include <limits.h>

int main(void)
{
    char char_A = 'A';
    int int_A = 65;
    size_t size_char_A;
    size_t size_int_A;
    size_t size_M = sizeof('M');

    size_char_A = sizeof(char_A);
    size_int_A = sizeof(int_A);
    printf("sizeof(int) = %zu\n", sizeof(int));
    printf("sizeof(char) = %zu\n", sizeof(char));
    printf("size_char_A = %zu\n", size_char_A);
    printf("size_int_A = %zu\n", size_int_A);
    printf("size of 'M' = %zu\n", size_M);

    return 0;
}

编译:

gcc char_literal_c.c -o char_literal_c.exe

运行的结果为:

sizeof(int) = 4
sizeof(char) = 1
size_char_A = 1
size_int_A = 4
size of 'M' = 4

从这个结果,可以看到C语言中:

int 类型为4字节;

char 类型为1字节;

int型变量为4字节;

char型变量为1字节;

但是,char的字面常量却是占用4个字节,实际是按int型存储。

二、C++语言char字面量

如下程序:

// char_literal_cpp.cpp
#include <iostream>
using namespace std;

int main()
{
    char char_A = 'A';
    int int_A = 65;
    size_t size_char_A;
    size_t size_int_A;
    size_t size_M = sizeof('M');

    size_char_A = sizeof(char_A);
    size_int_A = sizeof(int_A);
    cout << "sizeof(int) = " << sizeof(int) << endl;
    cout << "sizeof(char) = " << sizeof(char) << endl;
    cout << "size_char_A = " << size_char_A << endl;
    cout << "size_int_A = " << size_int_A << endl;
    cout << "size of 'M' = " << size_M << endl;

    return 0;
}

编译:

g++ char_literal_cpp.cpp -o char_literal_cpp.exe

运行的结果为:

sizeof(int) = 4
sizeof(char) = 1
size_char_A = 1
size_int_A = 4
size of 'M' = 1

从这个结果,可以看到C++语言中:

int 类型为4字节;

char 类型为1字节;

int型变量为4字节;

char型变量为1字节;

同样,char的字面常量也是占用1个字节,按char型存储。

三、cout.put()函数

C++早期的编译器和C语言的处理方式一样,也是采用4个字节存储char型字面量,也就是将char型字面量的ASCII值存放到一个int型中。但是由于cout函数输出时没有%d和%c这样的占位符,这样带来一个问题。

如下代码:

cout << ‘A’<< endl

将输出为65而不是字符A,这样在标准输出类ostream中便产生了一个成员函数put专门用来输出字符,如下代码:

// char_put.cpp
#include <iostream>
using namespace std;

int main()
{
    char char_A = 'A';
    int int_A = 65;

    cout << "cout.put(char_A) = ";
    cout.put(char_A);
    cout << endl;

    cout << "cout.put(int_A) = ";
    cout.put(int_A);
    cout << endl;

    return 0;
}

输出结果为:

cout.put(char_A) = A
cout.put(int_A) = A
四、总结

现代的C和C++编译器对于char型字面量的存储不同:

C语言中,按int型存储,为4字节。

C++语言中,按char存储,为1字节。

所以,如下代码:

// C语言中
printf("%d", sizeof('M'));

将输出为4。

CenterPoint 工程复现 CenterPoint 工程复现,本文中使用版本:BEVerse工程下的mmdet3d (`MMDet3d v0.17.3`)版本,MMDetection3D中其他版本的使用`大同小异`。 阅读详情

相关推荐

Windows 10下用vcpkg一键搞定libcurl开发环境(Code::Blocks 20.03配置指南)

本文详细介绍了在Windows 10系统下使用vcpkg工具快速配置libcurl开发环境的完整指南,特别针对Code::Blocks 20.03 IDE进行优化设置。通过vcpkg自动化管理依赖项,简化libcurl的安装与配置过程,帮助开发者高效搭建网络通信功能开发环境,并提供了常见问题解决方案和实际项目中的最佳实践。

weixin_28040125的博客 249

C++和标准库速成(二)——字面量、变量和运算符

字面量、变量和运算符

qq_51180928的博客 825

MicroPython跨平台移植实战:从源码解析到STM32+FreeRTOS部署

本文详细解析了MicroPython的跨平台移植实战,重点介绍了如何将其从源码开始,成功部署到STM32微控制器并运行于FreeRTOS实时操作系统。内容涵盖源码结构解析、编译环境搭建、内存管理协调、FreeRTOS任务集成、数学库(math)启用与优化,以及自定义模块开发等核心步骤,为开发者提供了一套完整的、可操作的嵌入式Python移植方案。

vodka的博客 1014

C 和 C++ 字符串

==================================================Keywords: String Literal, Object, Array, Lvalue Author:   whyglinux Date:     2007-05-16==================================================C 和 C++ 字符

zheng80037的专栏 784

从零完成 STM32 + ESP-01S + 云服务器 TCP 通信测试

STM32 通过 USART3 控制 ESP-01S 接入手机 2.4 GHz 热点,随后连接公网云服务器 8.152.204.86:9002。云端在同一 TCP 连接中连续收到 seq=1~6 的测试报文,5 个发送间隔平均约 5.4 秒,说明本次 TCP 上行链路已经打通。

weixin_51387720的博客 310

Python 打包与发布陷阱:如何用 setuptools 和 PyInstaller 生成跨平台可执行文件?

使用。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1207

第四章 数据类型01 char

1.数据类型 1.1 数据类型有什么用? 数据类型用来声明变量,程序在运行过程中根据不同的数据类型分配不同的空间大小; Int i= 10; Double d = 1.23; i和d类型不同,空间大小不同; 1.2 数据类型在java语言包括两种: 第一种:基本数据类型 基本数据类型又可以划分4大类8小种: 第一类:整数型 byte,short,i...

weixin_43343678的博客 723

电表协议避坑指南:DLT645-2007与Modbus RTU的5大核心差异对比

本文深入对比了DLT645-2007与Modbus RTU两大电表通讯协议的核心差异,涵盖协议定位、数据地址、报文结构及实测性能。DLT645-2007作为电力行业标准,数据定义统一但效率受限;Modbus RTU作为通用协议,灵活高效但需依赖厂家点表。文章结合实测数据与开发经验,为不同场景下的协议选型与编程实践提供了清晰的避坑指南。

weixin_29166013的博客 108

C 和 C++ 字符串字面量

C 和 C++ 字符串字面量(String Literal)既有相同之处,又有一些区别。了解这些内容对于加深字符串字面量以及相关一些概念的理解、澄清一些常见的概念误区不无助益。本文以普通字符串字面量 "hello" 为例总结说明如下。相同点:字符串字面量是对象C/C++ 中的对象(Object)指的是一块存储区。字符串字面量是不需要创建过程就可使用的对象,所以它既没有变量那样的声明或者

zhongjie的专栏 1874

浙大数值分析lab2

最可怕的一道题,题目是这样的 Root of a Polynomial A polynomial of degree nnn has the common form as p(x)=cnxn+cn−1xn−1+⋯+c1x+c0p(x)=c_n x^n + c_{n-1} x^{n-1} + \cdots + c_1 x + c_0p(x)=c​n​​x​n​​+c​n−1​​x​

yao_zou的博客 4795

贝叶斯网络在R语言中的应用

本文将介绍如何在R语言中使用贝叶斯网络进行建模和推断,并提供相应的源代码示例。以上就是在R语言中使用贝叶斯网络进行建模和推断的基本步骤。通过构建贝叶斯网络模型并使用相应的函数,我们可以对变量之间的依赖关系进行建模、推断和预测。在建立了贝叶斯网络模型后,我们可以使用数据集来估计变量之间的条件概率。接下来,我们可以使用数据集来构建贝叶斯网络模型。除了进行推断,我们还可以使用贝叶斯网络模型进行预测。一旦我们获得了贝叶斯网络模型和条件概率表,我们就可以使用该模型进行推断。首先,我们需要安装并加载相关的R包。

CodeMaven的博客 1277

C 和 C++ 字符串字面量的比较

C 和 C++ 字符串字面量(String Literal)既有相同之处,又有一些区别。了解这些内容对于加深字符串字面量以及相关一些概念的理解、澄清一些常见的概念误区不无助益。本文以普通字符串字面量 "hello" 为例总结说明如下。如果你发现了本文中的错误,或者对本文有什么感想或建议,可通过 whyglinux AT gmail DOT com 邮箱和作者联系。相同点: 字符串字面

Make Progress Everyday! 918

Unity实战篇 | 教你怎样将Unity的启动Logo 设置成 自己制作的 帧动画

上一篇文章我们讲了怎样在不购买专业版的情况下自定义Unity的启动Logo。 那本篇文章就来介绍一下,怎样在去除默认Logo的前提下制作自己的启动动画!

努力前行,总会成为自己心中的那道光 6万+

C 和 C++ 字符串字面量(String Literal)的比较(转)

C 和 C++ 字符串字面量(String Literal)既有相同之处,又有一些区别。了解这些内容对于加深字符串字面量以及相关一些概念的理解、澄清一些常见的概念误区不无助益。本文以普通字符串字面量 "hello" 为例总结说明如下。相同点: 字符串字面量是对象C/C++ 中的对象(Object)指的是一块存储区。字符串字面量是不需要创建过程就可使用的对象,所以它既没有变量那样的声明

蹲马步 的专栏 1367

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C++11 字面量操作符

2. 字面量重载运算符可以把字面值常量(注意只能是字面值常量,也就是“123”,123,1.23,‘a’这样,不能是变量),转化为需要的类型对象。这些字面量可以直接在代码中使用,并具有与其类型相对应的值和语义。它们提供了一种直观和方便的方式来表示常量值,并在编程中广泛使用。C++支持多种类型的字面量,包括整数、浮点数、字符、字符串和布尔值。

泠山的博客 1652

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

转:C 和 C++ 字符串字面量的比较

转自:http://bbs.chinaunix.net/viewthread.php?tid=936821 ================================================== Keywords: String Literal, Object, Array, Lvalue Author: whyglinux<whyglinux AT gmail D...

weixin_34138377的博客 76

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

sizeof在C与C++中对字符常量的区别

In C : #include int main(){ char a = 'a'; printf("Size of char : %d\n",sizeof(a)); printf("Size of char : %d\n",sizeof('a')); return 0; } Output : Size of char : 1 Size of char : 4 In C++

rangf的专栏 2565

c中单个字符所占字节

C/C++中单个字符所占的字节情况

XSH的博客 1万+

第五章 字符串字面量---一个特殊的数组

http://blog.youkuaiyun.com/code_crash/article/details/4854987    [置顶] 第五章 字符串字面量---一个特殊的数组 分类: 数组与指针的艺术2009-11-23 10:57 6796人阅读 评论(25) 收藏 举报 编译器stringdeprecatedconstantscarrays   字符串字面量(string liter

诺尔曼 941

sizeof('a')在c/c++中的不同之处

232

Atitit 字符串模板与 字符串插值 目录 1.1. 字符串插值是将字符串中的占位符替换为局域变量的过程 1 1.2. 模板字面量 是允许嵌入表达式的字符串字面量 1 1.3. 格式化字符串[编辑

Atitit 字符串模板与 字符串插值 目录 1.1. 字符串插值是将字符串中的占位符替换为局域变量的过程 1 1.2. 模板字面量 是允许嵌入表达式的字符串字面量 1 1.3. 格式化字符串[编辑] 1 2. 单个的变量插值与map对象插值 2 2.1. 实现方式 变量插值 2 2.2. 对象属性插值 gson objectJson对象模式 2 3. 常见场景 2 3.1...

attilax的专栏 346

字符型数组的疑难点:char ch1[] =“abc“ 和 char ch2[] ={‘a‘,‘b‘,‘c‘} 的区别

char ch1[] ="abc" 有4个元素 : a b c \0。char ch2[] ={'a','b','c'} 有3个元素: a b c。但是ch2 打印完第三个后,没遇到结束标准\0,就一直打印,直至遇到\0。因为ch1 打印完第三个元素,遇到\0 就停止了 所以长度为3。而ch2 需要一直打印,直到遇见\0,才会停止。因为当ch1 打印到第四个元素\0 时就停止了。

Yskm_sir的博客 879

字符串--用数组初始化和用指针初始化方法区别

const char * ptr1 = "fine."; const char ar[] = "fine.";以上的声明中,ptr1和ar都是该字符串的地址,但这两种形式并不完全相同。初始化数组:字符串储存在静态存储区。但是,程序在开始运行时才会为该数组分配内存(以上面的声明为例,数组形式ar[ ]在计算机的内存中分配为一个内含6个元素的数组(每一个元素对应一个字符,还加上一个末尾的空字符‘\0’)

hjy517744152的博客 2925
上一篇: 本教程的一点说明
下一篇: C51使用指针
金达南
博客等级 码龄3年 137粉丝 12原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值