逆向基础--C++数据类型 (02)
一.介绍
使用编程语言进行编程时,需要用到各种变量来存储各种信息。变量保留的是它所存储的值的内存位置。这意味着,当您创建一个变量时,就会在内存中保留一些空间。
变量的名称可以由字母、数字和下划线字符组成。它必须以字母或下划线开头。
大写字母和小写字母是不同的,因为 C++ 是大小写敏感的。
1.1 基本数据类型
其中char、int、short、long默认声明的都是signed (有符号)类型。如果取值要求是无符号,需要显示加上unsigned修饰符,如unsigned int a=23412414;
const表示常量,值不可修改。 如const int a=10000;
| 类型 | 关键字 | 字节大小 | 描述 |
| 布尔型 | bool | 1个字节 |
取值: |
| 字符型 | char | 1个字节 |
字符类型,通常用于存储 ASCII 字符 取值:-128 到 127 或 0 到 255 unsigned无符号取值: 0 到 255 |
| 宽字符类型 | wchar_t | 2 个或 4 个字节 |
适用于处理宽字符编码的文本, 可以表示更多的字符,包括中文、日文、韩文等非英文字符 示例:wchar_t wc = L'啊' // 一个中文字符 |
| 整型 | int | 4 |
通常用于存储普通整数 int的取值:-2,147,483,648 到 2,147,483,647 unsigned 无符号取值:0 到 4,294,967,295 |
| 短整型 | short | 2 |
取值:-32,768 到 32,767 unsigned 无符号取值:0 到 65,535 |
| 长整型 | long | 4 或 8 |
取值:取决于平台 unsigned 无符号取值:取决于平台 |
| 长长整型 | long long | 8 |
取值:-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 unsigned 无符号取值:0 到 18,446,744,073,709,551,615 |
| 单精度浮点数 | float | 4 |
约 ±3.4e±38(6-7 位有效数字) 理解为正负3.4 乘以10的38次方是指范围。 6-7 位有效数字是指精度 |
| 双精度浮点数 | double | 8 | 约 ±1.7e±308(15 位有效数字) |
| 扩展精度浮点数 | long double | 8、12 或 16 | 取决于平台 |
1.2 派生数据类型
| 数据类型 | 描述 | 示例 |
| 数组 | 相同类型元素的集合 | int arr[5] = {1, 2, 3, 4, 5}; |
| 指针 | 存储变量的内存地址 |
int x = 10; int* ptr = &x; //定义一个指针,存储x的内存地址 有点类似于C#值传递的ref或out关键字 |
| 引用 | 变量的别名 |
int& ref = x; //ref是x的引用,即别名
|
| 函数 | 函数类型,表示函数的签名 | int func(int a, int b); |
| 结构体 | 用户定义的数据类型,可以包含多个不同类型的成员 | struct Point { int x; int y; }; |
| 类 | 用户定义的数据类型,支持封装、继承和多态 | class MyClass { ... }; |
| 联合体 | 多个成员共享同一块内存 |
union Data { int i; float f; }; 这个例子中,Data联合体有二个成员:一个整数i、一个浮点数f 在任何时候,只能使用其中一个成员,因为它们都共享同一块内存 |
| 枚举 | 用户定义的整数常量集合 | enum Color { RED, GREEN, BLUE }; |
1.3 标准库类型
std是命名空间,使用std::前缀(或者使用using声明)
| 数据类型 | 描述 | 示例 |
| std::string | 字符串类型 | std::string s = "Hello"; |
| std::vector | 动态数组 | std::vector<int> v = {1, 2, 3}; |
| std::array | 固定大小数组(C++11 引入) | std::array<int, 3> a = {1, 2, 3}; |
| std::pair | 存储两个值的容器 | std::pair<int, float> p(1, 2.0); |
| std::map | 键值对容器 | std::map<int, std::string> m; |
| std::set | 唯一值集合 | std::set<int> s = {1, 2, 3}; |
1.4 C++11 新增类型
| 数据类型 | 描述 | 示例 |
| auto | 自动类型推断 | auto x = 10; |
| decltype | 获取表达式的类型 |
int x = 10; // x 是 int 类型,值为10 decltype(x) y = 20; // y 也是 int 类型,值为20 |
| nullptr | 空指针常量 |
int* ptr = nullptr; //声明ptr变量的整数指针,初始化为 nullptr(空指针) |
| std::initializer_list | 初始化列表类型 |
std::initializer_list<int> list = {1, 2, 3} //只读访问:std::initializer_list 只提供对元素的只读访问。不能通过它修改元素 |
| td::tuple | 元组类型,可以存储多个不同类型的值 |
std::tuple<int, float, char> t(1, 2.0, 'a'); //C#中的元组(Tuple) |
1.5 其它
| typedef | 为现有类型定义别名 |
typedef int MyInt; //为int类型定义别名 MyInt a=10; //使用这个别名来声明一个整型变量a,并初始化为10。 |
| using | 为现有类型定义别名(C++11 引入) |
using string = std::string; //声明放在.cpp文件头部 string str="hello"; //在类中使用 可以使用 using来代替typedef |
浙公网安备 33010602011771号