跳转至

🚀 C++ 变量类型详解:从基础到进阶

💡 本文将带你全面掌握 C++ 中的变量类型,从基本数据类型到高级自定义类型,助你夯实编程基础!


🧱 基本数据类型

1. 整型家族

类型 字节数(常见) 范围 示例
int 4B -2,147,483,648 到 2,147,483,647 int age = 25;
short 2B -32,768 到 32,767 short year = 2023;
long 4B/8B 系统相关 long population = 7_800_000_000L;
long long 8B -9e18 到 9e18 long long bigNumber = 1'000'000'000'000LL;
unsigned int 4B 0 到 ~4e9 unsigned count = 100U;

📌 小贴士: 使用后缀修饰符(如 L/LL/U)可明确常量类型

C++
1
2
3
4
5
6
7
#include <iostream>
using namespace std;

int main() {
    cout << "Size of int: " << sizeof(int) << " bytes" << endl;
    return 0;
}


2. 浮点型世界

类型 字节数 精度 示例
float 4B ~7位有效数字 float pi = 3.14f;
double 8B ~15位有效数字 double gravity = 9.81;
long double 12B/16B 更高精度 long double epsilon = 1e-20L;

💡 注意: 浮点数比较需谨慎!推荐使用 std::abs(a - b) < EPSILON 方式判断相等性

C++
1
2
3
4
5
#include <cmath>
bool is_equal(float a, float b) {
    const float EPSILON = 1e-6;
    return std::abs(a - b) < EPSILON;
}

3. 字符与布尔类型

类型 特点 示例
char 单字节字符 char grade = 'A';
wchar_t 宽字符(2/4B) wchar_t symbol = L'Ω';
bool 逻辑值 bool is_valid = true;

新特性(C++20+): - char8_t: UTF-8 字符(需 /std:c++20 编译选项) - char16_t/char32_t: UTF-16/32 支持


🎛️ 复合数据类型

1. 数组与字符串

C++
1
2
3
4
5
// 固定大小数组
int numbers[5] = {1, 2, 3, 4, 5};

// 字符串(C风格)
char greeting[] = "Hello, World!";

⚠️ 警告: C风格字符串易出错,推荐使用 std::string(后续章节讲解)


2. 指针与引用

C++
1
2
3
int x = 10;
int* ptr = &x;   // 指针
int& ref = x;    // 引用

🔍 对比: - 指针: 可修改指向对象 - 引用: 一旦绑定不可更改


📦 用户自定义类型

1. 结构体(Struct)

C++
1
2
3
4
5
6
7
struct Student {
    std::string name;
    int age;
    float gpa;
};

Student s1 = {"Alice", 20, 3.8};

2. 枚举类型(Enum)

C++
1
2
3
4
5
6
7
enum Color {
    RED,
    GREEN,
    BLUE
};

Color my_color = GREEN;

🔧 建议: 使用 enum class 避免命名冲突(C++11+)


🔄 特殊类型与关键字

1. void 类型

  • 表示无类型
  • 常见于函数返回值声明
  • void* 可指向任意类型数据
C++
1
2
3
void printInfo() {
    std::cout << "No return value!" << std::endl;
}

2. 类型别名(Type Aliases)

C++
typedef unsigned int uint;
using size_type = std::size_t;

🛠️ 变量定义与初始化

1. 定义方式

C++
1
2
3
4
5
6
7
8
9
// 单个变量
int x;       // 声明
x = 10;      // 赋值

// 立即初始化
int y = 20;

// C++11统一初始化
int z{30};   // 推荐使用

2. 初始化陷阱

❌ 错误示例:

C++
int a;     // 未初始化!值不确定
std::cout << a; // 危险操作!

✅ 正确做法:

C++
int b{0};   // 值初始化


⚠️ 注意事项

1. 内存对齐

  • 不同平台对内存对齐要求不同
  • 使用 alignof(T) 查询对齐要求
  • 使用 #pragma pack 可调整对齐方式

2. 类型转换

  • 显式转换(强制类型转换):

    C++
    int i = 3.14;    // 截断为3
    float f = (float)i;
    

  • 隐式转换可能导致精度丢失!


❓ 常见问题解答

Q1: 如何查看变量类型大小?

A: 使用 sizeof(类型)sizeof(变量)

C++
std::cout << "Size of double: " << sizeof(double) << " bytes" << std::endl;

Q2: 如何处理大整数运算?

A: 使用 long long 或第三方库(如 Boost.Multiprecision)

Q3: 如何选择合适的类型?

A: 根据需求权衡: - 存储空间 - 数值范围 - 运算精度 - 平台兼容性