C++ 中基本数据类型
一、 基本数据类型及其表示范围
C++中的基本数据类型在不同位数的机器上有所差别,如下表中为C++中常见的数据类型大小
数据类型 | 大小(byte) | 备注 |
---|---|---|
bool | 1 | |
char | 1 | 单字符 |
wchar_t | 2 | 宽字符 |
char16_t | 2 | Unicode字符(16位) |
char32_t | 4 | Unicode字符(32位) |
short | 2 | 短整型,为 short int 缩写 |
int | 4 | 整形,在64位操作系统上占 4 字节,最小可以为2字节 |
long | 4 | 长整型 |
long long | 8 | 长整型 |
float | 4 | 单精度浮点型 |
double | 8 | 双精度浮点数 |
long double | 16 | 扩展精度浮点数 |
数据类型可分类为:
- 布尔类型:可用于:0表示false,非0表示true
- 字符类型 :分为3种,
char
,signed char
,unsigned char
,但是其表现形式只是分为有符号 和 无符号。字符类型实际上是整数,它与字符之间存在映射关系。char
:实际上会表现为两种形式中的一种,具体由编译器来决定,在不同的编译器下可能表示不同的形式。signed char
:明确表示为有符号,表示范围一般为:-128~127unsigned char
:明确表示为无符号,表示范围为:0~255
- 整数类型:默认
short, int, long, long long
都是带符号的。 - 浮点类型:
float, double
二、 字符类型基本用法
1. 定义字符串字面值,C和C++有所不同
C++ 和 C 的字符串字面值都是不可以进行修改的,两者的写法有所区别:
/******* C++ 中字符串定义 ********/
// 方式1: 指针的形式赋值,左侧必须为:const char* 类型
const char* pStr1 = "hello world";
// 方式2:数组的形式来赋值
char pStr2[] = "hello world";
/******* C 中字符串定义 ********/
// 方式1:指针形式赋值,前面可以没有 const 修饰符
char* pStr3 = "hello world";
// 方式2:数组形式赋值
char pStr4[] = "hello world";
- C++ 方式1 中右侧 "hello world" 字符串字面值明确是以 const char 字符数组来存储,所以左侧必须为
const char*
类型变量,不可以为const signed char*
或const unsigned char*
,因为C++对此做了严格的限制,让其更加安全一点。
且 *pStr1指针所指的内容为常量字串,所以不可以修改该字串的内容,但是可以让该指针指向其它的字串。如:
修改字串的内容时将报错:pStr1[1] = 'T'
;
让该指针指向其它的字串时可正常运行:pStr1 = "Test"
- C++ 方式2 相当于正常的创建字符数组,可以进行编辑修改。
- C 中 方式1 虽然左侧 *pStr3 没有明确声明为 const ,但是其字串仍然是不可以进行修改的,如果尝试进行修改
pStr3[1] = "Y"
将出现未定义行为的错误。因为C语言中字符串字面值也是以不可修改的方式进行存储,但是左侧可以用const signed char*
或const unsigned char*
类型的变量来接受赋值操作,C语言对此未作严格限制和规定。 - 【总结:以字符串的形式赋值对应指针变量的常见用法如下】
/**** 在 C++ 中左侧只有一种形式: char前必须要有const ******/
const char* pStr1 = "hello world";
const wchar_t *p1 = L"Hello" // wchar_t 用法相同
/**** 在 C 中左侧可以有三种形式 ******/
char* s1 = "hello world";
signed char* s2 = "hello world";
unsigned char* s3 = "hello world";
2. char
及其衍生出其它的类型和用法,如:
- 由于ASCll 表中字符所对应的整型数值范围是:0~127,所以表示字符字面值时,可以用
char
,signed char
,unsigned char
中的任意类型。但一般推荐使用char
来表示。 - 在表示整型数值的时候,根据需要的数值范围来确定使用
signed char
还是unsigned char
。 wchar_t
对应的为宽字节字符,占2个字节,定义时需要在字符串前加上L,如:L"hello world"
。- C类型的字符串是以
\0
结束的数组来表示,C++中是以标准库中定义的字符串类std::string
来表示。
3. 字符数组的初始化
// 常见的几种初始化方式
char* p1 = new char[10];
char* p2 = new char[10]{0};
char* p3 = new char[10]{10,11,12,13};
char* p4 = new char[10]{ 'a','b',127 };
p1
数组中的字符均未初始化,其每个值可以为随机的(但是要在char范围内)p2
数组中的只有第一个元素 p2[0] 的值为0, 其它的均未初始化,为char范围内随机值。p3
,p4
数组内只有前4个元素被初始化,剩余元素未初始化,均为char范围内随机值。- 数组名指针变量的地址等于数组首元素的地址。
【参考资料】
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!