跳转至

C++ 变量类型

变量 本质上是程序可操作的一块 内存存储区域的名称 。 在程序运行过程中,变量用于保存数据,其值可以在程序执行期间发生变化。

在 C++ 中,每个变量都有一个 确定的数据类型 。 数据类型决定了:

  • 变量在内存中占用的空间大小;
  • 变量的内存布局;
  • 该变量可以存储的数据范围;
  • 可以对变量执行的操作。

一、变量命名规则

变量名(标识符)由以下字符组成:

  • 字母(A–Z、a–z)
  • 数字(0–9)
  • 下划线(_

命名规则如下:

  • 必须以 字母或下划线 开头;
  • 不能以数字开头;
  • C++ 区分大小写 ,例如 countCount 是不同的变量名。

二、基本变量类型

基于前一章介绍的基本数据类型,C++ 中常用的变量类型包括:

类型 描述
bool 布尔类型,只能取 truefalse,通常占用 1 字节
char 字符类型,用于存储 ASCII 字符,通常占用 1 字节
int 整数类型,通常占用 4 字节
float 单精度浮点数,1 位符号位、8 位指数、23 位尾数,通常占用 4 字节
double 双精度浮点数,1 位符号位、11 位指数、52 位尾数,通常占用 8 字节
void 表示“无类型”,通常用于函数返回值
wchar_t 宽字符类型,用于表示更大范围的字符,占用 2 或 4 字节

三、常见变量类型分类

整数类型(Integer Types)

  • int:普通整数,通常 4 字节
  • short:短整数,通常 2 字节
  • long:长整数,通常 4 或 8 字节
  • long long:更长整数,通常 8 字节

浮点类型(Floating-Point Types)

  • float:单精度浮点数
  • double:双精度浮点数
  • long double:扩展精度浮点数(大小依实现而定)

字符类型(Character Types)

  • char:普通字符
  • wchar_t:宽字符
  • char16_t:16 位 Unicode 字符(C++11)
  • char32_t:32 位 Unicode 字符(C++11)

布尔类型(Boolean Type)

  • bool:只能取 truefalse

枚举类型(Enumeration Types)

  • enum:一组命名的整型常量

指针类型(Pointer Types)

  • type*:存储某种类型对象的内存地址

数组类型(Array Types)

  • type[]type[size]:同一类型元素的集合

结构体、类与联合体

  • struct:结构体类型
  • class:类类型
  • union:共用体类型

四、关于类型大小的说明

在 C++ 中, 类型占用的字节数取决于编译器和计算机架构 。 C++ 标准并不规定具体大小,而是规定 最小取值范围 ,以保证代码的可移植性。

例如:

  • 在大多数 64 位系统中:
  • int 通常为 4 字节
  • long 通常为 8 字节
  • 但在某些平台上,long 仍可能是 4 字节

五、变量定义(Definition)

变量定义 用于告诉编译器:

  • 在哪里分配存储空间;
  • 使用什么类型;
  • 是否需要初始化。

变量定义的一般形式为:

type variable_list;

示例:

int    i, j, k;
char   c, ch;
float  f, salary;
double d;

变量初始化

变量可以在定义时进行初始化:

type variable_name = value;

示例:

int d = 3, f = 5;
char x = 'x';

⚠️ 注意:

  • 具有 静态存储期 的变量会被自动初始化为 0
  • 局部变量如果未初始化,其值是**未定义的**

六、变量声明(Declaration)

变量声明 向编译器说明变量的名称和类型,但 不分配存储空间

变量声明常用于 多文件程序 中,通常使用 extern 关键字。

extern int a;

一个变量可以被声明多次,但只能被定义一次。


示例:声明与定义分离

#include <iostream>
using namespace std;

// 变量声明
extern int a, b;
extern int c;
extern float f;

int main()
{
    // 变量定义
    int a, b;
    int c;
    float f;

    a = 10;
    b = 20;
    c = a + b;

    cout << c << endl;

    f = 70.0 / 3.0;
    cout << f << endl;

    return 0;
}

输出结果:

30
23.3333

七、函数的声明与定义

函数同样可以先声明,后定义:

// 函数声明
int func();

int main()
{
    int i = func();
}

// 函数定义
int func()
{
    return 0;
}

八、左值(Lvalue)与右值(Rvalue)

左值(lvalue)

  • 表示 具有内存地址 的表达式
  • 可以出现在赋值运算符左侧或右侧
int a = 10;  // a 是左值

右值(rvalue)

  • 表示 临时值或字面量
  • 只能出现在赋值运算符右侧
int g = 20;  // 20 是右值

下面的语句是 非法的

10 = 20; // 编译错误

九、小结

  • 变量是内存空间的抽象名称
  • 类型决定变量的大小、范围和操作方式
  • 区分“定义”和“声明”对多文件程序非常重要
  • 理解左值与右值是掌握 C++ 表达式的基础