C++入门到实战教程:从零基础到完整项目(系统完整版)

C++入门到实战教程:从零基础到完整项目(系统完整版)

本教程严格按照13章节目录编写,适配纯零基础学习者,从学习意义、环境搭建、基础语法、核心重难点、面向对象、STL、文件操作到完整实战项目全覆盖,所有代码可直接复制编译运行,无删减、无跳步,学完可独立开发小型控制台项目。

1. 为什么学习 C++

1.1 C++ 是什么

C++ 是一门高性能、编译型、静态类型、支持多编程范式的通用编程语言,兼容C语言底层语法,同时拥有完善的面向对象、泛型编程能力,是底层开发、高性能开发的核心语言。

核心原理详解
1. 编译型:代码必须经过编译器整体编译为机器码才可运行,执行速度远快于Python等解释型语言;
2. 静态类型:变量定义时必须指定数据类型,编译阶段就做类型检查,报错更早、程序更稳定;
3. 多范式:同时支持面向过程(基础语法)、面向对象(类与对象)、泛型编程(STL模板),适配从简单脚本到大型架构的所有开发场景。

1.2 核心优势(不可替代的价值)

  • 性能极致:直接操作内存、无虚拟机开销、编译成原生机器码,速度仅次于C语言,远超Java、Python。

  • 应用领域极广:游戏开发、后端高并发、操作系统、嵌入式、自动驾驶、图形图像、算法竞赛、区块链底层全部主力语言。

  • 语法全面:支持面向过程、面向对象、泛型编程、函数式编程,学懂C++可快速通吃其他编程语言。

  • 就业天花板高:高端技术岗位(游戏引擎、底层架构、自动驾驶、服务器内核)优先招聘C++开发者。

1.3 适合人群

零基础编程入门、想深耕计算机底层、准备算法竞赛、想从事游戏/嵌入式/后端底层开发、需要学习高性能编程的学习者。

2. 开发环境准备

C++ 是编译型语言,必须安装编译器+代码编辑器/IDE,推荐3套零基础友好环境,任选其一即可。

2.1 推荐开发工具

方案1:Dev-C++(零基础首选,极简免配置)

优点:一键安装、无需配置、适合新手练语法、调试简单;缺点:不适合大型项目。

方案2:Visual Studio 2022(Windows全能IDE)

优点:功能强大、调试精准、支持大型项目、适配C++11及以上新特性;缺点:安装体积大。

方案3:VS Code + MinGW(轻量跨平台)

优点:轻量简洁、跨Windows/Mac/Linux;适合习惯轻量化编辑器的学习者。

2.2 验证环境是否正常(首个程序)

新建 main.cpp,复制以下代码运行,无报错即环境搭建成功。

#include <iostream>
using namespace std;

int main()
{
    // 程序入口,所有代码写在这里
    cout << "C++环境搭建成功!开始学习!" << endl;
    return 0;
}

运行结果:C++环境搭建成功!开始学习!

2.3 核心编译原理

源代码(.cpp) → 编译器预处理 → 编译汇编 → 链接 → 可执行文件(.exe) → 运行输出结果。区别于Python逐行解释执行,C++一次性编译优化,运行无冗余开销,这是其高性能的核心原因。

新手易错点
1. 中文符号报错:所有代码括号、分号必须为英文符号;
2. 缺少头文件:使用cout/string等功能必须引入对应头文件;
3. main函数唯一:一个项目有且仅有一个程序入口main函数。

3. 变量、数据类型与输入输出

3.1 变量概念

变量是内存中用来存储数据的可修改容器,程序运行时会在内存中开辟一块空间,用于存放临时数据。C++严格遵循:先定义、后使用、类型固定三大规则。

核心原理:变量本质是「内存空间的别名」,定义变量时,系统会根据数据类型分配对应大小的内存,后续赋值、修改数据,本质是修改对应内存空间的值。

变量定义格式:数据类型 变量名 = 初始值;

3.2 五大基础数据类型

#include <iostream>
#include <string>
using namespace std;

int main()
{
    // 1. 整型:整数
    int age = 18;
    // 2. 浮点型:小数
    double pi = 3.14159;
    // 3. 字符型:单个字符
    char ch = 'A';
    // 4. 布尔型:真假(true/false)
    bool flag = true;
    // 5. 字符串型:一串字符
    string name = "C++零基础学习";

    // 输出变量
    cout << "年龄:" << age << endl;
    cout << "圆周率:" << pi << endl;
    cout << "字符:" << ch << endl;
    cout << "状态:" << flag << endl;
    cout << "名称:" << name << endl;

    return 0;
}

3.3 键盘输入 cin

cin 用于接收用户键盘输入,实现交互式程序。

#include <iostream>
using namespace std;

int main()
{
    int num;
    cout << "请输入一个数字:";
    cin >> num;
    cout << "你输入的数字是:" << num << endl;
    return 0;
}

3.4 常量

常量是程序运行中值绝对不可修改的量,用于固定不变的参数(如圆周率、税率)。C++推荐使用 const 定义常量,安全性高于C语言宏定义。

常量原理与规范
1. 定义格式:const 数据类型 常量名 = 初始值;,必须初始化,后续无法赋值修改;
2. 命名规范:常量名全大写,下划线分隔,区分变量;
3. 作用:防止核心参数被意外修改,提升程序稳定性。

常量测试代码

#include <iostream>
using namespace std;

int main()
{
    const double PI = 3.1415926;
    // PI = 3.14;  // 报错!常量不可修改
    cout << "圆周率常量:" << PI << endl;
    return 0;
}

4. 控制流:条件与循环

默认情况下,代码从上到下顺序执行。控制流语句可以改变代码执行顺序,实现判断、循环、跳转逻辑,是所有业务逻辑、算法程序的基础。分为条件判断循环语句两大类。

核心原理:通过布尔表达式(真/假)作为判断依据,编译器根据表达式结果,选择性执行代码块或重复执行代码块。

4.1 条件判断语句

if-else 分支

#include <iostream>
using namespace std;

int main()
{
    int score;
    cout << "请输入成绩:";
    cin >> score;

    if (score >= 90)
    {
        cout << "优秀" << endl;
    }
    else if (score >= 60)
    {
        cout << "及格" << endl;
    }
    else
    {
        cout << "不及格" << endl;
    }
    return 0;
}

switch 多分支

int day;
cin >> day;
switch (day)
{
    case 1: cout << "周一"; break;
    case 2: cout << "周二"; break;
    default: cout << "未知星期"; break;
}

4.2 循环语句

for 循环(最常用,已知循环次数)

// 打印0-9
for (int i = 0; i < 10; i++)
{
    cout << i << " ";
}

while 循环(未知次数,条件循环)

int i = 0;
while (i < 5)
{
    cout << i << " ";
    i++;
}

4.3 跳转语句原理与实战

跳转语句用于手动终止/跳过循环,精准控制循环流程,仅作用于当前最内层循环

  • break:强制跳出当前循环/switch结构,直接结束整体逻辑

  • continue:跳过本次循环剩余代码,直接进入下一次循环迭代

跳转语句完整示例

#include <iostream>
using namespace std;

int main()
{
    // break示例:找到5立刻终止循环
    for (int i = 1; i <= 10; i++)
    {
        if (i == 5) break;
        cout << i << " ";
    }
    cout << endl;

    // continue示例:跳过5,继续循环
    for (int i = 1; i <= 10; i++)
    {
        if (i == 5) continue;
        cout << i << " ";
    }
    return 0;
}

运行结果
1 2 3 4
1 2 3 4 6 7 8 9 10

  • break:跳出当前循环/switch

  • continue:跳过本次循环,执行下一次

5. 函数与作用域

5.1 函数作用

函数是封装一段重复逻辑的独立代码块,是代码模块化的核心。通过函数可以实现:代码复用、逻辑解耦、结构清晰、便于调试维护,是从简单代码过渡到项目开发的关键。

函数核心原理
1. 程序执行到函数调用处,会跳转到函数内部执行,执行完毕后返回调用处;
2. 参数用于传递外部数据,返回值用于带回函数执行结果;
3. 无返回值函数用void修饰,仅执行逻辑,不返回数据。

5.2 函数语法与实例

格式:返回值类型 函数名(参数列表){ 函数体 return 返回值; }

#include <iostream>
using namespace std;

// 定义加法函数
int add(int a, int b)
{
    return a + b;
}

// 无返回值函数
void printInfo()
{
    cout << "欢迎学习C++函数" << endl;
}

int main()
{
    printInfo();
    int res = add(10, 20);
    cout << "10+20=" << res << endl;
    return 0;
}

5.3 函数声明与分文件规范

C++遵循先声明,后调用原则:如果函数定义在调用代码之后,必须在文件头部提前声明函数,否则编译器无法识别函数,编译报错。这是大型多文件项目的基础规范。

函数声明+定义完整示例

#include <iostream>
using namespace std;

// 函数声明:仅告诉编译器函数格式
int sub(int a, int b);

int main()
{
    cout << "10-5=" << sub(10,5) << endl;
    return 0;
}

// 函数定义:具体实现逻辑
int sub(int a, int b)
{
    return a - b;
}

5.4 变量作用域

  • 局部变量:定义在函数/代码块内部,仅当前作用域可用,作用域结束后内存自动释放,互不干扰。

  • 全局变量:定义在所有函数外部,全局生效,整个文件所有函数均可访问,程序结束才释放内存。

作用域原理演示

#include <iostream>
using namespace std;

// 全局变量
int num = 100;

void test()
{
    // 局部变量,仅test函数可用
    int num = 200;
    cout << "局部变量num:" << num << endl;
}

int main()
{
    test();
    cout << "全局变量num:" << num << endl;
    return 0;
}

核心规则:局部变量优先于全局变量,同名变量局部覆盖全局。

6. 指针与引用(C++核心重难点)

指针和引用是C++区别于Python/Java的核心精髓,本质是对内存地址的操作。普通变量操作的是数值,指针/引用操作的是内存本身,是C++高性能、底层开发、高效传参的核心基础。

6.1 指针:存储变量地址的变量(原理+代码详解)

指针核心原理
1. 所有变量都存放在内存中,每个内存空间都有唯一的内存地址;
2. 指针变量专门用来存储其他变量的内存地址;
3. &取地址符:获取变量内存地址;
4. *解引用符:通过指针地址,操作对应内存的数据。

#include <iostream>
using namespace std;

int main()
{
    int num = 100;
    // 取地址:&
    // 指针定义:数据类型 *指针名
    int *p = &num;

    cout << "变量值:" << num << endl;
    cout << "变量地址:" << &num << endl;
    cout << "指针存储的地址:" << p << endl;
    cout << "指针取值(解引用):" << *p << endl;

    // 通过指针修改原变量值
    *p = 200;
    cout << "修改后num:" << num << endl;
    return 0;
}

6.2 引用:变量的别名

引用是变量的别名,编译器不会为引用开辟新内存,直接与原变量共用同一块内存空间,修改引用等价于直接修改原变量,无内存开销、安全性高于指针,常用于函数参数传参。

引用核心规则
1. 引用必须初始化,必须绑定一个已有变量;
2. 引用一旦绑定,终身无法更换绑定对象;
3. 不存在空引用,杜绝野指针问题。

int main()
{
    int a = 10;
    // 引用定义:数据类型 &别名 = 原变量
    int &b = a;

    b = 20;
    cout << a << endl; // 输出20,原变量被修改
    return 0;
}

6.3 指针与引用核心区别

  • 内存差异:指针是独立变量,拥有独立内存空间;引用是变量别名,无独立内存,完全共享原变量内存。

  • 灵活性差异:指针可空、可修改指向、可二次赋值;引用必须初始化、不可改指向、无空引用。

  • 使用场景:常规函数传参优先用引用(安全简洁);底层内存操作、动态内存分配优先用指针(灵活强大)。

核心总结:引用是「简化版安全指针」,指针是「完整版灵活内存工具」。

7. 数组、字符串与容器

7.1 普通数组(固定长度)

普通数组是固定长度、同类型、连续内存的数据集合,用于批量存储相同类型数据。

数组核心原理
1. 数组内存连续,访问速度极快;
2. 数组下标从0开始,最大下标=长度-1;
3. 定义时长度固定,运行中无法扩容缩容(普通数组最大缺陷)。

新手易错点:数组下标越界、长度固定无法动态增删数据。

#include <iostream>
using namespace std;

int main()
{
    // 定义数组并初始化
    int arr[5] = {1, 2, 3, 4, 5};
    // 遍历数组
    for (int i = 0; i < 5; i++)
    {
        cout << arr[i] << " ";
    }
    return 0;
}

7.2 C++ 字符串 string

C语言仅支持字符数组,操作繁琐、易越界、无法直接拼接;C++封装的 string 字符串类,是安全、功能丰富、动态长度的字符串工具,彻底替代字符数组。

string核心原理与常用API
1. s.size():获取字符串有效长度;
2. + 运算符:直接拼接字符串;
3. 支持直接赋值、比较、遍历,无需手动管理内存。

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string s = "Hello C++";
    cout << "字符串长度:" << s.size() << endl;
    cout << "拼接字符串:" << s + " 零基础学习" << endl;
    return 0;
}

7.3 动态容器(替代普通数组)

普通数组长度固定,无法适配数据动态增减的场景。C++ STL提供的 vector动态数组,可以自动扩容、动态增删元素,无需手动管理内存,是项目开发中100%替代普通数组的首选容器。

vector核心原理:底层基于动态内存实现,元素满容量时自动开辟更大内存、迁移数据、释放旧内存,使用者无需感知内存变化。

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    vector<int> v;
    // 尾部添加元素
    v.push_back(10);
    v.push_back(20);
    v.push_back(30);

    // 遍历容器
    for (int val : v)
    {
        cout << val << " ";
    }
    return 0;
}

8. 类与对象:面向对象编程

面向对象(OOP)是C++的灵魂,是大型项目开发的核心思想。区别于面向过程的「一步步写代码」,面向对象思想是「封装事物、抽象功能」,核心三大特性:封装、继承、多态,用于开发高复用、高维护、低耦合的大型项目。

核心原理:将现实事物抽象为「类」,类包含事物的属性(数据)和行为(方法),通过实例化对象调用功能。

8.1 类与对象基础、封装

类是事物的抽象模板,对象是模板的具体实例。封装是OOP第一核心特性:将私有数据隐藏在类内部,仅通过公开的成员方法访问、修改数据,避免外部随意篡改,保证数据安全。

关键知识点
1. private私有:仅类内部可访问,外部禁止访问;
2. public公开:全局可访问,是对外的功能接口;
3. 构造函数:对象创建时自动执行,专门用于初始化成员属性。

#include <iostream>
#include <string>
using namespace std;

// 定义学生类
class Student
{
// 私有成员:外部无法直接访问
private:
    string name;
    int age;
// 公开成员:外部可访问
public:
    // 构造函数:创建对象时自动调用,初始化数据
    Student(string n, int a)
    {
        name = n;
        age = a;
    }

    // 成员方法:展示信息
    void showInfo()
    {
        cout << "姓名:" << name << " 年龄:" << age << endl;
    }
};

int main()
{
    // 通过类创建对象
    Student s1("张三", 18);
    s1.showInfo();
    return 0;
}

8.2 继承(代码复用)

继承的核心价值是代码复用。定义通用父类封装公共属性和方法,子类继承父类,直接拥有父类所有公开功能,无需重复编写代码,大幅减少冗余代码,优化项目结构。

继承原理与规则
1. 语法:class 子类名 : public 父类名
2. 公开继承:父类public→子类public,父类private子类无法继承;
3. 子类可扩展独有方法,实现功能拓展。

继承完整示例代码

#include <iostream>
#include <string>
using namespace std;

// 父类:人类
class Person
{
public:
    string name;
    int age;
    void showInfo()
    {
        cout << "姓名:" << name << " 年龄:" << age << endl;
    }
};

// 子类:学生类,继承人类
class Student : public Person
{
public:
    int id;
    void showStuInfo()
    {
        cout << "学号:" << id << endl;
    }
};

int main()
{
    Student s;
    s.name = "李四";
    s.age = 19;
    s.id = 2026001;
    s.showInfo();    // 复用父类方法
    s.showStuInfo(); // 调用子类独有方法
    return 0;
}

8.3 多态(接口统一)

多态是OOP的高阶核心,核心作用:接口统一,实现各异。通过虚函数机制,父类指针可以指向不同子类对象,调用同名方法时自动执行子类重写的逻辑,是大型框架、插件化开发的核心原理。

多态实现原理:父类定义虚函数,子类重写虚函数,通过父类指针调用方法,程序运行时动态绑定子类实现。

多态完整示例代码

#include <iostream>
using namespace std;

// 父类
class Animal
{
public:
    // 虚函数:实现多态
    virtual void cry()
    {
        cout << "动物发出叫声" << endl;
    }
};

// 子类:狗
class Dog : public Animal
{
public:
    void cry() override
    {
        cout << "汪汪汪" << endl;
    }
};

// 子类:猫
class Cat : public Animal
{
public:
    void cry() override
    {
        cout << "喵喵喵" << endl;
    }
};

int main()
{
    Animal *p1 = new Dog();
    Animal *p2 = new Cat();
    p1->cry(); // 执行Dog的cry
    p2->cry(); // 执行Cat的cry
    delete p1;
    delete p2;
    return 0;
}

9. STL 标准模板库

STL(标准模板库)是C++官方封装的通用、高效、可复用的数据结构与算法库,完全基于泛型编程实现,无需开发者手写底层数据结构和算法,大幅降低开发难度、提升代码效率,是工业级C++开发的必备技能。

STL核心优势:跨平台、性能极致、代码简洁、无需重复造轮子、适配所有数据类型。

9.1 三大核心组件

  • 容器(核心存储):标准化数据结构,适配不同业务场景
    vector:动态数组、string:字符串、map:键值对映射、set:去重集合、queue:队列、stack:栈

  • 算法(核心逻辑):内置通用算法,无需手写
    sort排序、find查找、reverse反转、swap交换、遍历筛选

  • 迭代器(统一接口):所有容器通用的遍历工具,统一访问方式,屏蔽底层差异

9.2 常用STL实战示例

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
    vector<int> v = {5, 2, 9, 1, 5};
    // STL排序算法
    sort(v.begin(), v.end());

    // 遍历输出
    for (auto x : v)
    {
        cout << x << " ";
    }
    return 0;
}

10. 文件操作与异常处理

10.1 文件读写(持久化存储)

程序运行时的数据默认存储在内存中,程序关闭、窗口退出后数据会全部丢失。文件操作可以将数据写入本地磁盘文件,实现数据持久化存储,是所有管理系统、客户端项目的必备核心功能。

核心原理
1. ofstream:文件写入流,创建/打开文件并写入数据;
2. ifstream:文件读取流,读取本地文件内容到程序;
3. 操作完成必须close关闭文件,释放系统资源。

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main()
{
    // 1. 写入文件
    ofstream out("data.txt");
    out << "C++文件操作测试\n";
    out << "学生成绩数据保存" << endl;
    out.close();

    // 2. 读取文件
    ifstream in("data.txt");
    string line;
    while (getline(in, line))
    {
        cout << line << endl;
    }
    in.close();

    return 0;
}

10.2 异常处理(程序容错)

程序运行中遇到非法操作(除数为0、文件不存在、数组越界)会直接崩溃退出。异常处理可以主动捕获程序错误,自定义报错信息,避免程序崩溃,大幅提升项目的稳定性和容错能力。

异常处理原理
1. try:包裹可能出错的风险代码;
2. throw:主动抛出异常信息;
3. catch:捕获异常、处理错误、兜底容错。

#include <iostream>
using namespace std;

int main()
{
    try
    {
        int a = 10, b = 0;
        if (b == 0)
        {
            throw "除数不能为0!";
        }
        cout << a / b << endl;
    }
    catch (const char* err)
    {
        cout << "异常提示:" << err << endl;
    }
    return 0;
}

11. 实战项目:学生成绩管理系统

本章为全知识点整合实战项目,无缝融合前面所有核心知识点:变量、分支循环、函数封装、结构体、vector动态容器、文件持久化存储、模块化编程。全程面向过程+轻量化模块化思想,适配零基础落地,学完可掌握小型控制台项目的完整开发流程。

项目核心原理:用结构体封装学生数据、vector批量存储数据、函数拆分独立功能、文件实现数据持久化、循环菜单实现交互逻辑。

11.1 项目功能

  • 添加学生信息(姓名、学号、成绩)

  • 展示所有学生信息

  • 按学号查询学生

  • 删除学生信息

  • 数据保存到本地文件,持久化存储

11.2 完整可运行源码

#include <iostream>
#include <vector>
#include <string>
#include <fstream>
#include <algorithm>
using namespace std;

// 学生结构体
struct Student
{
    string name;
    int id;
    int score;
};

// 全局学生容器
vector<Student> stuList;

// 添加学生
void addStudent()
{
    Student s;
    cout << "请输入学生姓名:";
    cin >> s.name;
    cout << "请输入学生学号:";
    cin >> s.id;
    cout << "请输入学生成绩:";
    cin >> s.score;
    stuList.push_back(s);
    cout << "✅ 学生信息添加成功!\n" << endl;
}

// 展示所有学生
void showAll()
{
    if (stuList.empty())
    {
        cout << "暂无学生数据!\n" << endl;
        return;
    }
    cout << "===== 学生信息列表 =====\n";
    cout << "学号\t姓名\t成绩\n";
    for (auto &s : stuList)
    {
        cout << s.id << "\t" << s.name << "\t" << s.score << endl;
    }
}

// 按学号查询
void searchStudent()
{
    int id;
    cout << "请输入查询学号:";
    cin >> id;
    bool find = false;
    for (auto &s : stuList)
    {
        if (s.id == id)
        {
            cout << "查询成功:" << s.name << " " << s.score << endl;
            find = true;
            break;
        }
    }
    if (!find) cout << "未找到该学生!\n";
}

// 保存数据到文件
void saveData()
{
    ofstream fout("student_data.txt");
    for (auto &s : stuList)
    {
        fout << s.id << " " << s.name << " " << s.score << endl;
    }
    fout.close();
    cout << "✅ 数据已保存到 student_data.txt\n";
}

// 菜单界面
void menu()
{
    cout << "===== 学生成绩管理系统 =====\n";
    cout << "1. 添加学生信息\n";
    cout << "2. 查看所有学生\n";
    cout << "3. 学号查询学生\n";
    cout << "4. 保存数据并退出\n";
    cout << "==========================\n";
    cout << "请输入操作序号:";
}

int main()
{
    int op;
    while (true)
    {
        menu();
        cin >> op;
        switch (op)
        {
            case 1: addStudent(); break;
            case 2: showAll(); break;
            case 3: searchStudent(); break;
            case 4: saveData(); return 0;
            default: cout << "输入错误,请重新选择!\n";
        }
    }
    return 0;
}

12. 学习方法与进阶路线

12.1 零基础高效学习方法(原理+落地技巧)

  • 多敲多练:每段代码亲手敲写,拒绝复制粘贴,熟悉语法手感

  • 循序渐进:基础语法→OOP→STL→项目,不跳步、不贪快

  • 断点调试:学会IDE调试,看懂代码执行流程,排查bug

  • 项目驱动:学完知识点立刻融入小项目,学以致用

12.2 完整进阶学习路线

初级阶段(本教程)

语法基础、控制流、函数、指针、OOP、STL、文件操作、小型项目

中级进阶

C++11/14/17新特性、智能指针、内存管理、模板编程、异常高级用法

高级进阶

多线程并发、网络编程、Qt图形界面、数据结构与算法、游戏开发、嵌入式开发

就业方向

游戏开发工程师、C++后端开发、嵌入式开发、自动驾驶算法、底层架构开发

13. 总结与练习

13.1 全书核心知识点原理总结

  1. C++主打高性能、底层可控、多范式编程,应用场景广泛

  2. 基础语法是根本:变量、类型、输入输出、条件循环、函数作用域

  3. 重难点核心:指针与引用,掌控内存是C++最大优势

  4. 面向对象是项目基石:封装、继承、多态,实现模块化开发

  5. STL大幅提升开发效率,是实际开发必备技能

  6. 文件操作实现数据持久化,异常处理保障程序稳定

  7. 通过学生管理系统完成零基础到实战的落地闭环

13.2 分层课后练习(基础巩固+进阶拔高)

  • 独立默写所有基础语法代码,熟练掌握循环、分支、函数

  • 改写学生管理系统:新增修改成绩、按成绩排序功能

  • 练习STL常用容器,熟练vector、string、sort算法

  • 尝试开发小型新项目:简易通讯录、计算器系统

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿尔法_3

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值