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 扩展精度浮点数

数据类型可分类为:

  1. 布尔类型:可用于:0表示false,非0表示true
  2. 字符类型 :分为3种,char, signed char, unsigned char,但是其表现形式只是分为有符号无符号。字符类型实际上是整数,它与字符之间存在映射关系。
    • char:实际上会表现为两种形式中的一种,具体由编译器来决定,在不同的编译器下可能表示不同的形式。
    • signed char:明确表示为有符号,表示范围一般为:-128~127
    • unsigned char:明确表示为无符号,表示范围为:0~255
  3. 整数类型:默认 short, int, long, long long都是带符号的。
  4. 浮点类型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";
  1. C++ 方式1 中右侧 "hello world" 字符串字面值明确是以 const char 字符数组来存储,所以左侧必须为const char*类型变量,不可以为const signed char*const unsigned char*,因为C++对此做了严格的限制,让其更加安全一点。
    *pStr1指针所指的内容为常量字串,所以不可以修改该字串的内容,但是可以让该指针指向其它的字串。如:
    修改字串的内容时将报错:pStr1[1] = 'T'
    让该指针指向其它的字串时可正常运行:pStr1 = "Test"
  2. C++ 方式2 相当于正常的创建字符数组,可以进行编辑修改。
  3. C 中 方式1 虽然左侧 *pStr3 没有明确声明为 const ,但是其字串仍然是不可以进行修改的,如果尝试进行修改pStr3[1] = "Y"将出现未定义行为的错误。因为C语言中字符串字面值也是以不可修改的方式进行存储,但是左侧可以用 const signed char*const unsigned char* 类型的变量来接受赋值操作,C语言对此未作严格限制和规定。
  4. 【总结:以字符串的形式赋值对应指针变量的常见用法如下】
/**** 在 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范围内随机值。
  • p3p4数组内只有前4个元素被初始化,剩余元素未初始化,均为char范围内随机值。
  • 数组名指针变量的地址等于数组首元素的地址


【参考资料】

  1. C++中数据类型
  2. Difference between signed / unsigned char
posted @ 2022-07-22 10:04  Jeffxue  阅读(1228)  评论(0编辑  收藏  举报