逆向基础--C++数据类型 (02)

一.介绍

  使用编程语言进行编程时,需要用到各种变量来存储各种信息。变量保留的是它所存储的值的内存位置。这意味着,当您创建一个变量时,就会在内存中保留一些空间。

  变量的名称可以由字母、数字和下划线字符组成。它必须以字母或下划线开头。

  大写字母和小写字母是不同的,因为 C++ 是大小写敏感的。

  1.1 基本数据类型

    其中char、int、short、long默认声明的都是signed (有符号)类型。如果取值要求是无符号,需要显示加上unsigned修饰符,如unsigned  int a=23412414; 

    const表示常量,值不可修改。 如const int a=10000; 

类型 关键字 字节大小 描述
布尔型 bool 1个字节

取值:true 或 false

字符型 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 位有效数字是指精度

例如我们想存储123,456,792,但实现存储的是123,456,789,两者都从 123,456 开始一致,到了第7位开始出现差异,从非零数字开始,大约有7位有效数字是可靠的。
这么理解--超过非零数字开始的7位数(带小数的数)的不宜用float来存储。
双精度浮点数 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的引用,即别名

refx代表同一个内存地址。对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

posted on 2025-11-09 11:43  花阴偷移  阅读(0)  评论(0)    收藏  举报

导航