当前位置: 首页 > news >正文

【C++入门】变量和基本类型

目录

一、 基本内置类型

1.1. 整型(Integer Types)

1.2. 浮点型(Floating-point Types)

1.3. 字符型(Character Type)

1.4. 布尔型(Boolean Type)

1.5. 示例代码

二、变量声明与定义

2.1. 声明 vs 定义

2.2. 变量的初始化

2.3. 默认初始化规则

三、作用域与生命周期

3.1. 作用域类型

3.2. 生命周期对比

四、复合类型

4.1. 引用(别名)

4.2. 指针

五、const限定符

5.1. 基本用法

5.2. 顶层const vs 底层const

六、类型别名

6.1. 传统方式

6.2. C++11新方式

七、auto类型推导(C++11)

八、关键注意事项


在C++编程中,变量和基本类型是编程的基础。了解如何声明和使用变量,以及掌握C++中的基本数据类型,是编写有效C++程序的第一步。

一、 基本内置类型

C++提供了多种基本数据类型,用于存储不同类型的数据。

1.1. 整型(Integer Types)

  • int:标准整型,通常占用4个字节(32位系统)。
  • short:短整型,通常占用2个字节。
  • long:长整型,通常占用4或8个字节(取决于系统)。
  • long long:更长的整型,通常占用8个字节。

整型变量可以存储正数、负数和零。

1.2. 浮点型(Floating-point Types)

  • float:单精度浮点型,通常占用4个字节。
  • double:双精度浮点型,通常占用8个字节。
  • long double:扩展精度浮点型,占用字节数依赖于实现(通常是12或16个字节)。

浮点型变量可以存储小数和科学计数法表示的数。

1.3. 字符型(Character Type)

  • char:字符型,通常占用1个字节。
  • wchar_t宽字符,通常2字节,处理Unicode字符。

字符型变量可以存储单个字符,包括字母、数字和特殊字符。字符常量用单引号括起来,如'A'

1.4. 布尔型(Boolean Type)

  • bool:布尔型,用于存储逻辑值truefalse

布尔型变量通常用于条件判断和控制结构。

1.5. 示例代码

以下是一个简单的C++程序,展示如何声明和使用变量和基本类型:

#include <iostream>

int main() {
    int age = 25;
    double salary = 5000.0;
    char letter = 'A';
    bool isPassed = true;

    std::cout << "Age: " << age << std::endl;
    std::cout << "Salary: " << salary << std::endl;
    std::cout << "Letter: " << letter << std::endl;
    std::cout << "Is Passed: " << std::boolalpha << isPassed << std::endl;

    return 0;
}

声明了四个变量,分别属于整型、浮点型、字符型和布尔型,并使用std::cout输出它们的值。 

二、变量声明与定义

2.1. 声明 vs 定义

在C++中,变量必须先声明后使用。声明变量的基本语法是:

dataType variableName;
  • dataType:变量的数据类型,决定了变量可以存储的数据的类型和范围。
  • variableName:变量的名称,用于在程序中引用变量。

 例如:

int age;
double salary;
char letter;
bool isPassed;

这里,age是一个整型变量,salary是一个双精度浮点型变量,letter是一个字符型变量,isPassed是一个布尔型变量。

2.2. 变量的初始化

变量可以在声明时进行初始化,也可以在声明后进行赋值。 

int age = 25;
double salary = 5000.0;
char letter = 'A';
bool isPassed = true;

// 或者声明后赋值
age = 30;
salary = 6000.0;
letter = 'B';
isPassed = false;

2.3. 默认初始化规则

变量类型默认值
全局变量零初始化
局部内置类型未定义(随机值)
类类型调用默认构造函数

三、作用域与生命周期

3.1. 作用域类型

int global = 100;  // 全局作用域

int main() {
    int local = 50; // 块作用域
    {
        int inner = 30; // 嵌套块作用域
    }
}

3.2. 生命周期对比

变量类型生命周期存储位置
局部变量块执行期间栈内存
全局变量程序运行全程数据段
static局部变量首次定义到程序结束数据段

四、复合类型

4.1. 引用(别名)

int val = 42;
int &refVal = val;  // 必须初始化
refVal = 100;       // 修改原变量值

引用特性

  • 必须绑定到对象(不能绑定字面量)

  • 类型严格匹配(double &d = i;非法)

  • 无法重新绑定

4.2. 指针

int *p = nullptr;  // 现代C++推荐初始化方式
int num = 10;
p = &num;          // 取地址
*p = 20;           // 解引用

// 指针运算
int arr[5] = {0};
int *ptr = arr;
ptr++;  // 移动sizeof(int)字节

指针操作规范

  • 访问前必须检查非空:if(p != nullptr) { ... }

  • 优先使用智能指针(unique_ptr/shared_ptr

  • 避免野指针:int *p; *p = 5;(危险!) 

五、const限定符

5.1. 基本用法

const int MAX_SIZE = 100;  // 必须初始化
const int *p = &MAX_SIZE; // 指向常量的指针
int *const cp = &var;      // 常量指针
constexpr int N = 20;      // 编译期常量(C++11)

5.2. 顶层const vs 底层const

int i = 0;
const int ci = 42;  // 顶层const
const int *p2 = &ci; // 底层const
const int *const p3 = p2; // 右const是顶层,左const是底层

六、类型别名

6.1. 传统方式

typedef double wages;  // wages是double的别名
typedef wages base, *p; // base是double, p是double*

6.2. C++11新方式

using SI = Sales_item;  // 更直观的语法
using Ptr = int*;       // 指针类型别名

七、auto类型推导(C++11)

auto i = 42;        // int
auto d = 3.14;      // double
auto p = &i;        // int*
auto &r = d;        // double&

// 复合类型推导
const auto *cp = &i; // const int*
auto ptr = new auto(10); // int*

auto使用规范

  • 避免滥用:auto x = GetComplexObject(); 可能隐藏类型信息

  • 必须初始化:auto y;(错误!)

  • 结合decltype使用:decltype(f()) sum = x;

八、关键注意事项

  • 变量命名冲突:避免与标准库名称冲突(如countlist

  • 类型转换陷阱

unsigned u = 10;
int i = -42;
cout << i + i << endl;  // -84
cout << u + i << endl;  // 4294967264(32位系统)
  • 字面值后缀
auto x = 3.14f;   // float
auto y = 100ULL;  // unsigned long long
  • 类型转换操作
int a = 5;
double b = static_cast<double>(a);  // C++风格转换

相关文章:

  • Win10 下搭建免费的 FTP 服务器 FileZilla
  • 如何简单获取三个月免费试用的SSL证书
  • 处理Java中的异常
  • STC 51单片机64——关于STC8H的ADC回程误差问题
  • starrocks批量启停脚本
  • Git使用(二)--如何配置 GitHub 远程仓库及本地 Git 环境
  • 兴达易控Profinet 转 ModbusTCP跨网段通信模块
  • RK3588 编译 openssl
  • 【机器学习】非结构化数据革命:机器学习中的文本、图像与音频
  • Hive-基础入门
  • 【工具变量】中国地级市科技金融试点政策名单数据(2000-2024年)
  • 洛谷题单2025csp
  • 瑞芯微RK3562核心板参数配置介绍,这性价比如何呢
  • 36.C++二叉树进阶5(平衡二叉搜索树 - 红黑树及其插入操作图解)
  • 相对与绝对路径的关系
  • 3.5、HASH哈希(散列)函数
  • 网络安全 api 网络安全 ast技术
  • 多模态大模型
  • 有序数组的插入
  • 【大模型实战】利用ms-swift微调框架对QwQ-32B推理模型进行微调
  • 英国研究:近七成年轻人认为上网有害心理健康
  • 受工友诱骗为获好处费代购免税品,海口海关:两当事人被立案
  • 甘肃白银煤矿透水事故仍有3人失联,现场约510立方米煤泥拥堵巷道
  • 澎湃思想周报|《混沌少年时》与青少年社媒禁令;自雇陷阱
  • 家国万里·时光故事会|科学家伉俪,用玉米书写家国情怀
  • 经济日报:人工智能开启太空经济新格局