在 C 和 C++ 中,数据类型是用于定义变量的内存布局和操作方式的基本单元。它们决定了变量存储的内存大小、表示范围及可执行的操作。C/C++ 提供了多种数据类型,包括基本数据类型、枚举类型、派生类型、用户定义类型等。

1. 基本数据类型(Primitive Data Types)

这些是语言内建的基本数据类型,直接用于存储最简单的数值数据。

整型int):用于表示整数类型的数值。整型的大小通常是 4 个字节,取决于系统,但在大多数现代系统中是 32 位,表示范围为 -2,147,483,6482,147,483,647

- short(短整型):通常为 2 字节,表示范围较小。

- long(长整型):通常为 4 个或 8 个字节,表示范围较大。

- long long(更长整型):通常为 8 个字节,用于表示更大的范围。

带符号signed)和无符号unsigned):signed 是默认的,表示范围包括正负数;unsigned 则只能表示非负数(0 及以上)。

浮点型float, double):用于表示带小数的数值。

- float:单精度浮点数,占 4 字节,约 7 位有效数字。

- double:双精度浮点数,占 8 字节,约 15 位有效数字。

- long double:扩展精度浮点数,通常占 10 到 16 字节,精度更高,但实现因编译器而异。

字符型char):用于存储单个字符,占 1 个字节(通常为 8 位),可以表示 ASCII 编码中的字符。

- signed charunsigned char:分别表示带符号和无符号字符。

布尔型bool):仅用于 C++,表示布尔值 truefalse,占 1 字节。

2. 枚举类型(Enumerated Type)

enum 用于定义一组具名的整数常量。每个枚举值默认从 0 开始依次递增。示例如下:

enum Color { RED, GREEN, BLUE };

Color c = RED;

在这里,RED 的值是 0,GREEN 是 1,BLUE 是 2。

3. 派生数据类型(Derived Data Types)

这些类型是通过基本数据类型派生出来的,用于更复杂的数据结构。

指针(Pointer):用于存储变量的内存地址。C/C++ 中的指针是一种强大的工具,可以用来操作内存。

int a = 10;

  int *ptr = &a; // ptr 存储 a 的地址

数组(Array):用于存储相同类型的数据的集合。数组在内存中是连续存储的,可以通过索引访问每个元素。

int arr[5] = {1, 2, 3, 4, 5};

结构体(Structure):一种用户定义的类型,用于将不同数据类型的变量组合在一起。特别适用于描述复杂的数据结构。

 struct Person {

      char name[50];

      int age;

  };

联合体(Union):与结构体类似,但所有成员共享相同的内存地址,这意味着一个时刻只能存储一个成员。

union Data {

      int i;

      float f;

      char str[20];

  };

函数:函数本身也是一种数据类型,在 C/C++ 中可以用来声明指向函数的指针。

4. 用户定义的类型(User-defined Types)

C++ 允许通过 typedefusing 定义新的类型名称,以及类和结构体来构造自定义数据类型。

typedefusing:用于给现有类型起别名。

typedef int Integer;

  using Integer = int;

  Integer a = 5;

类(Class):C++ 的核心特性,用于定义对象类型,包含成员变量和成员函数。

class Car {

  public:

      int speed;

      void drive() { /*...*/ }

  };

5. 空类型(Void Type)

void 用于表示空类型,在函数返回类型中常见,表示不返回值。`void` 指针是通用指针,表示可以指向任何数据类型,但不能直接解引用,需要转换为具体的类型指针。

6. C++11/14 新增类型

在 C++11 和 C++14 中,新增了一些类型增强类型安全性和效率,例如:

nullptr:表示空指针,取代传统的 NULL 宏,提高类型安全性。

auto:自动类型推导,让编译器推导变量类型。

auto x = 10; // x 会被推导为 int

decltype:用于获取表达式的类型,通常用于模板和泛型编程。

7. C++中的其他数据类型(如标准库类型)

C++ 标准库提供了丰富的容器和数据结构类型,如 std::string(字符串类)、`std::vector`(动态数组)、`std::map`(键值对集合)等,用于更高级的数据操作。

这些数据类型构成了 C/C++ 编程的基础,不同的类型适用于不同的场景,可以根据需求选择合适的数据类型来组织和存储数据。

往事堪堪亦澜澜,前路漫漫亦灿灿。