c++超详细基础教程(快速入门)

这篇具有很好参考价值的文章主要介绍了c++超详细基础教程(快速入门)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

❤作者:那些年丶我们逃过的课

❤博客主页:那些年丶我们逃过的课的博客_CSDN博客-c++题目,c++学习记录,c++小游戏领域博主

❤码云gitee:我的码云 - Gitee.com

❤期待你的关注,如果觉得还可以的话,可以点赞评论支持一下,每个评论我都会回访的🎉

目录:

  1. 教程简介
  2. c++初步了解
    1. c++简介
    2. 我的第一个程序
    3. 标准库
    4. 编译器及编译环境
    5. 注释
  3. c++数据类型
    1. 数据类型
    2. 数据类型占用空间大小
    3. 变量
    4. 常量
  4. 运算符
    1. 算数运算符
    2. 关系运算符
    3. 逻辑运算符
    4. 位运算符
  5. 头文件
  6. 输入输出流
  7. 分支语句
    1. if-else语句
    2. switch语句
  8. 循环
    1. for循环
    2. while循环
    3. do-while循环
    4. 嵌套循环
    5. 循环控制语句
  9. 数组
  10. 字符串
    1. cstring
    2. string
  11. 函数
  12. 总结

1.教程简介

本文是 那些年丶我们逃过的课 根据各种教程总结的c++基础教程🎉,可以让新手小白快速入门🎊。

新人博主,如文章有何问题,请大佬指出🙏

总结不易,如果觉得还行的话,请不要吝惜你的点赞👍,谢谢各位大佬了🎈

本教程适用人群:c++的初学者,帮助他们快速入门。

本文大量参考于:C++ 教程 | 菜鸟教程 (runoob.com)新手跟着这里面学习也是很方便的


2.c++初步了解

2.1c++简介

[C++](C++_百度百科 (baidu.com))是一种计算机高级程序设计语言,由C语言扩展升级而产生 ,最早于1979年由本贾尼·斯特劳斯特卢普在AT&T贝尔工作室研发。

C++既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计。

C++拥有计算机运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。

总的来说,c++是c语言的升级版,更加实用和简便。

在众多编程语言中,c++不是最简单的,但是确实数一数二的非常实用的,里面包含的各种库提供了丰富的功能。

2.2我的第一个程序

#include <iostream>
using namespace std;
int main()
{
    cout << "Hello, world!" << endl;	//程序从这里开始执行
    return 0;
}
效果:

c++菜鸟教程,c++基础,c++,开发语言

press any key to exit… 点击任意键退出

c++菜鸟教程,c++基础,c++,开发语言

  • using namespace std; 使用 std 命名空间。
  • int main()是主函数,程序从这里开始执行。
  • cout << “Hello World”;会在屏幕上显示消息 “Hello World”。
  • return 0;终止 main( )函数,并向调用进程返回值 0。
  • //或 ∗ ∗ * * 可以注释文本,详见2.5注释

2.3标准库

标准的 C++ 由三个重要部分组成:

  • 核心语言,提供了所有构件块,包括变量、数据类型和常量,等等。
  • C++ 标准库,提供了大量的函数,用于操作文件、字符串等。
  • 标准模板库(STL),提供了大量的方法,用于操作数据结构等。

2.4编译器及编译环境

目前主流的编译器有:**MSVC、GCC、Cygwin、MinGW、Visual Studio、Dev-c++**等等

可以选择免费的编译器,也可以为了实用性,实用付费的编译器。

编译环境新手不需要做过多了解。

需要详细了解的可以参考:

  1. 【c/c++】C/C++的编译器|编译环境(非常全面的比较)_StudyWinter的博客-CSDN博客_c++编译环境
  2. C++编译环境_na.na的博客-CSDN博客

2.5注释

  1. 单行注释://+注释内容
  2. 多行注释: ∗ * +注释内容+ ∗ *

注释内容可以被你看见但是系统不会运行注释内容


3.c++数据类型

3.1数据类型

类型 关键字
布尔型 bool
字符型 char
整型 int
浮点型 float
双浮点型 double
无类型 void
宽字符型 wchar_t

宽字符型新手不需要学习。

一些基本类型可以使用一个或多个类型修饰符进行修饰:

  • signed 符号型
  • unsigned 无符号型
  • short 短型
  • long 长型

例如: long int、unsigned long int等

3.2数据类型占用空间大小

类型 范围
char 1 个字节 -128 到 127 或者 0 到 255
unsigned char 1 个字节 0 到 255
signed char 1 个字节 -128 到 127
int 4 个字节 -2147483648 到 2147483647
unsigned int 4 个字节 0 到 4294967295
signed int 4 个字节 -2147483648 到 2147483647
short int 2 个字节 -32768 到 32767
unsigned short int 2 个字节 0 到 65,535
signed short int 2 个字节 -32768 到 32767
long int 8 个字节 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
signed long int 8 个字节 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
unsigned long int 8 个字节 0 到 18,446,744,073,709,551,615
float 4 个字节 精度型占4个字节(32位)内存空间,+/- 3.4e +/- 38 (~7 个数字)
double 8 个字节 双精度型占8 个字节(64位)内存空间,+/- 1.7e +/- 308 (~15 个数字)
long double 16 个字节 长双精度型 16 个字节(128位)内存空间,可提供18-19位有效数字。
wchar_t 2 或 4 个字节 1 个宽字符

3.3变量

变量其实只不过是程序可操作的存储区的名称。C++ 中每个变量都有指定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。

变量的名称可以由字母、数字和下划线字符组成,并且不能是关键字。它必须以字母或下划线开头。大写字母和小写字母是不同的,因为 C++ 是大小写敏感的。

tip:关键字:各种数据类型、函数名等等(大小写不一样就不算关键字了)

变量声明:

c++菜鸟教程,c++基础,c++,开发语言

3.4常量

一下可进行了解,不必深究:

c++菜鸟教程,c++基础,c++,开发语言

c++菜鸟教程,c++基础,c++,开发语言

c++菜鸟教程,c++基础,c++,开发语言

常量声明:

在 C++ 中,有两种简单的定义常量的方式:

  • 使用 #define 预处理器。
  • 使用 const 关键字。
  1. #define + 常数名 + 常数
  2. const + 数据类型 +常量名 = 常数

4.运算符

运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C++ 内置了丰富的运算符,新手需要了解如下运算符:

  • 算术运算符
  • 关系运算符
  • 逻辑运算符
  • 位运算符(只需了解,以后要讲)

4.1算数运算符

运算符 描述 实例
+ 把两个操作数相加 A + B 将得到 30
- 从第一个操作数中减去第二个操作数 A - B 将得到 -10
* 把两个操作数相乘 A * B 将得到 200
/ 分子除以分母 B / A 将得到 2
% 取模运算符,整除后的余数 B % A 将得到 0
++ 自增运算符,整数值增加 1 A++ 将得到 11
自减运算符,整数值减少 1 A-- 将得到 9

4.2关系运算符

运算符 描述 实例
== 检查两个操作数的值是否相等,如果相等则条件为真。 (A == B) 不为真。
!= 检查两个操作数的值是否相等,如果不相等则条件为真。 (A != B) 为真。
> 检查左操作数的值是否大于右操作数的值,如果是则条件为真。 (A > B) 不为真。
< 检查左操作数的值是否小于右操作数的值,如果是则条件为真。 (A < B) 为真。
>= 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。 (A >= B) 不为真。
<= 检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。 (A <= B) 为真。

4.3逻辑运算符

运算符 描述 实例
&& 称为逻辑与运算符。如果两个操作数都 true,则条件为 true。 (A && B) 为 false。
|| 称为逻辑或运算符。如果两个操作数中有任意一个 true,则条件为 true。 (A || B) 为 true。
! 称为逻辑非运算符。用来逆转操作数的逻辑状态,如果条件为 true 则逻辑非运算符将使其为 false。 !(A && B) 为 true。

4.4位运算符(只做了解)

运算符 描述 实例
& 按位与操作,按二进制位进行"与"运算。运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1; (A & B) 将得到 12,即为 0000 1100
| 按位或运算符,按二进制位进行"或"运算。运算规则:`0 0=0; 0
^ 异或运算符,按二进制位进行"异或"运算。运算规则:0^0=0; 0^1=1; 1^0=1; 1^1=0; (A ^ B) 将得到 49,即为 0011 0001
~ 取反运算符,按二进制位进行"取反"运算。运算规则:~1=-2; ~0=-1; (~A ) 将得到 -61,即为 1100 0011,一个有符号二进制数的补码形式。
<< 二进制左移运算符。将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。 A << 2 将得到 240,即为 1111 0000
>> 二进制右移运算符。将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。 A >> 2 将得到 15,即为 0000 1111

5.头文件

头文件引用方法:
#include<头文件名>

详细的头文件介绍及作用见:C++头文件的作用以及用法_陌千浔的博客-CSDN博客_c++头文件


6.输入输出流

使用输入输出流(cin、cout)需要引用iostream头文件

istream:常用于接收从键盘输入的数据;
ostream:常用于将数据输出到屏幕上;
ifstream:用于读取文件中的数据;
ofstream:用于向文件中写入数据;
iostream:继承自 istream 和 ostream 类,因为该类的功能兼两者于一身,既能用于输入,也能用于输出;
fstream:兼 ifstream 和 ofstream 类功能于一身,既能读取文件中的数据,又能向文件中写入数据。
————————————————
原文链接:https://blog.csdn.net/ccc369639963/article/details/122905471

#include<iostream>
using namespace std;
int main(){
    int a;
    cout<<"输入:";
    cin>>a;
    cout<<"输出:";
    cout<<a;
    return 0;
}

实现效果:

定义一个整型a,键盘输入a,再在屏幕上打印出a

c++菜鸟教程,c++基础,c++,开发语言


7.分支语句

分支语句分为种:

  1. if-else
  2. switch

7.1if-else语句

c++菜鸟教程,c++基础,c++,开发语言

if语句1:
if(条件1)
{
    执行语句1
}
else
{
    执行语句2
}
if语句2:
if(条件1)
{
    执行语句1
}
else if(条件2)
{
    执行语句2
}
else
{
    执行语句3
}

tip:else if可以无限添加,分成你想要的分支

7.2switch语句

switch(一个变量)
{
    case 条件1:执行语句1;break;//加break是为了执行完这一种情况后不会再执行下面的语句
    case 条件2:执行语句2;break;
    case 条件3:执行语句3;break;
    default:执行语句4;	//如果上面条件都不满足,就执行语句4
}

8.循环

有的时候,可能需要多次执行同一块代码。一般情况下,语句是顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。

c++菜鸟教程,c++基础,c++,开发语言

图片引用自:C++ 循环 | 菜鸟教程 (runoob.com)

循环类型基本有4种:

  1. for循环
  2. while循环
  3. do-while循环
  4. 嵌套循环
循环类型 描述
while 循环 当给定条件为真时,重复语句或语句组。它会在执行循环主体之前测试条件。
for 循环 多次执行一个语句序列,简化管理循环变量的代码。
do-while 循环 除了它是在循环主体结尾测试条件外,其他与 while 语句类似。
嵌套循环 您可以在 while、for 或 do…while 循环内使用一个或多个循环。

循环控制语句:

控制语句 描述
break 语句 终止 loopswitch 语句,程序流将继续执行紧接着 loop 或 switch 的下一条语句。
continue 语句 引起循环跳过主体的剩余部分,立即重新开始测试条件。
goto 语句 将控制转移到被标记的语句。但是不建议在程序中使用 goto 语句。

8.1for循环

for(设置变量;循环条件;每次循环后执行语句2)
{
    执行语句1;
}
#include<iostream>
using namespace std;
int main(){
    for(int i=1;i<=5;i++)//i从1开始循环,每次循环后i加1,直到i大于5结束
    {
        cout<<i<<endl;//每次循环输出i,endl为换行
    }
    return 0;
}

c++菜鸟教程,c++基础,c++,开发语言

tip:死循环: f o r ( ; ; ) for(;;) for(;;)

8.2while循环

while(条件)//如果满足条件,则执行,如果不满足,则退出循环
{
    执行语句;
}
#include<iostream>
using namespace std;
int main(){
    int i=1;
    while(i<=5)//如果i小于等于5,则执行,如果不满足,则退出循环
    {
        cout<<i<<endl;
        i++;
    }
    return 0;
}

c++菜鸟教程,c++基础,c++,开发语言

tip:死循环:while(1)

8.3do-while循环

do{//先执行语句
    执行语句;
}while(循环条件);//如果满足条件,继续执行
#include<iostream>
using namespace std;
int main(){
    int i=1;
    do{
        cout<<i<<endl;
        i++;
    }while(i<=5);
    return 0;
}

c++菜鸟教程,c++基础,c++,开发语言

8.4嵌套循环

for循环嵌套:
for(设置变量;循环条件;每次循环后执行语句)
{
    for(设置变量;循环条件;每次循环后执行语句)
    {
        执行语句;
    }
    执行语句;
}
while循环嵌套:
while(条件)
{
    while(条件)
    {
        执行语句;
    }
    执行语句;
}
do-while循环嵌套:
do{
    执行语句;
    do
    {
        执行语句;
    }while(条件);
}while(条件);

8.5循环控制语句

控制语句 描述
break 语句 终止 当层循环switch 语句,程序流将继续执行紧接着 loop 或 switch 的下一条语句。
continue 语句 引起循环跳过主体的剩余部分,立即重新开始测试条件。
goto 语句 将控制转移到被标记的语句。但是不建议在程序中使用 goto 语句。

tip:break只能结束当层循环,也就是只能结束掉一个for或一个while(do-while),嵌套循环需要break多次,每次一层


9.数组

数组定义:
变量类型 数组名称[数组大小]

注意:定义数组要多定义一些,比如int a[5],你不能操作a[5],因为这样定义只定义了a[0]到a[4]共5个

初始化数组:
int a[5]={1,2,3,4,5}

如果[ ]内不填数字,则后面{ }初始化中有多n个就会默认定义a[n+1]

#include <iostream>
using namespace std;
 
int main ()
{
   int n[10];
    // 初始化数组元素       
   for (int i=0;i<10;i++)
   {
      n[i]=i+100; // 设置i为i+100
   }
   // 输出数组中每个元素的值                     
   for (int j=0;j<10;j++)
   {
      cout<<j<<" "<<n[j]<<endl;
   }
   return 0;
}

c++菜鸟教程,c++基础,c++,开发语言


10.字符串

字符串有两种定义方式:

  1. 数组定义cstring
  2. c++标准库中的string

详解见:C++ 字符串 | 菜鸟教程 (runoob.com)

10.1cstring

定义:

char a[6] = {'h', 'e', 'l', 'l', 'O','\0'};

\0为字符串结尾,系统检测到后会认为字符串到此结束

也可以这么写:

char b[] = "hello";
#include<iostream>
using namespace std;
int main(){
    char a[6] = {'h', 'e', 'l', 'l', 'O','\0'};
    char b[] = "hello";
    cout<<a<<endl<<b;
    return 0;
}

c++菜鸟教程,c++基础,c++,开发语言

在引用cstring头文件来操作数组:

#include<cstring>
序号 函数 & 目的
1 strcpy(s1, s2); 复制字符串 s2 到字符串 s1。
2 strcat(s1, s2); 连接字符串 s2 到字符串 s1 的末尾。连接字符串也可以用 + 号,例如: string str1 = "runoob"; string str2 = "google"; string str = str1 + str2;
3 strlen(s1); 返回字符串 s1 的长度。
4 strcmp(s1, s2); 如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回值小于 0;如果 s1>s2 则返回值大于 0。
5 strchr(s1, ch); 返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。
6 strstr(s1, s2); 返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。

10.2string

使用string要先引用string头文件

#include <iostream>
#include <string>
 
using namespace std;
 
int main ()
{
   string str1 = "runoob";
   string str2 = "google";
   string str3;
   int  len ;
 
   // 复制 str1 到 str3
   str3 = str1;
   cout << "str3 : " << str3 << endl;
 
   // 连接 str1 和 str2
   str3 = str1 + str2;
   cout << "str1 + str2 : " << str3 << endl;
 
   // 连接后,str3 的总长度
   len = str3.size();
   cout << "str3.size() :  " << len << endl;
 
   return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

str3 : runoob
str1 + str2 : runoobgoogle
str3.size() :  12

11.函数

函数是一组一起执行一个任务的语句。每个 C++ 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数。

内容较丰富,详解可见:C++函数详解_问号小朋友的博客-CSDN博客_c++函数,这篇博客总结得比较好,建议看看

#include <iostream>
using namespace std;
 
// 函数声明
int max(int num1, int num2);
 
int main ()
{
   // 局部变量声明
   int a = 100;
   int b = 200;
   int ret;
 
   // 调用函数来获取最大值
   ret = max(a, b);
 
   cout << "Max value is : " << ret << endl;
 
   return 0;
}
 
// 函数返回两个数中较大的那个数
int max(int num1, int num2) 
{
   // 局部变量声明
   int result;
 
   if (num1 > num2)
      result = num1;
   else
      result = num2;
 
   return result; 
}

c++菜鸟教程,c++基础,c++,开发语言


12.总结

本教程到此结束了,如果觉得还行的,请留下你的三连😁,谢谢支持!

本文大量参考于:C++ 教程 | 菜鸟教程 (runoob.com)文章来源地址https://www.toymoban.com/news/detail-851708.html

到了这里,关于c++超详细基础教程(快速入门)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Mahout教程_编程入门自学教程_菜鸟教程-免费教程分享

    Mahout 是 Apache Software Foundation(ASF) 旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout包含许多实现,包括聚类、分类、推荐过滤、频繁子项挖掘。此外,通过使用 Apache Hadoop 库,Mahout 可以有效

    2024年02月13日
    浏览(40)
  • Ruby教程_编程入门自学教程_菜鸟教程-免费教程分享

    Ruby教程 Ruby - 概述 Ruby - 环境设置 Ruby - 语法 Ruby - 类和对象 Ruby - 变量,常量和文字 Ruby - 运算符 Ruby - 注释 Ruby - if ... else,case,unless Ruby - 循环 Ruby - 方法 Ruby - 块 Ruby - 模块和混合 Ruby - 字符串 Ruby - 数组 Ruby - 哈希 Ruby - 日期和时间 Ruby - Ranges Ruby - 迭代器 Ruby - 文件I/O. Ruby

    2024年02月06日
    浏览(45)
  • Aurelia教程_编程入门自学教程_菜鸟教程-免费教程分享

    Aurelia教程 Aurelia - 概述 Aurelia - 环境设置 Aurelia - 第一次申请 Aurelia - 组件 Aurelia - 组件生命周期 Aurelia - 自定义元素 Aurelia - Dependency Injections Aurelia - 配置 Aurelia - 插件 Aurelia - 数据绑定 Aurelia - Binding Behavior Aurelia - 转换器 Aurelia - Events Aurelia - 事件聚合器 Aurelia - 表格 Aurelia - HT

    2024年02月08日
    浏览(43)
  • Lucene教程_编程入门自学教程_菜鸟教程-免费教程分享

    Lucene是apache软件基金会 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发

    2024年02月12日
    浏览(54)
  • Unix教程_编程入门自学教程_菜鸟教程-免费教程分享

    UNIX / LINUX教程 Unix / Linux - 入门 Unix / Linux - 文件管理 Unix / Linux - 目录管理 Unix / Linux - 文件权限/访问模式 Unix / Linux - 环境 Unix / Linux基本实用程序 - 打印,电子邮件 Unix / Linux - 管道和过滤器 Unix / Linux - 进程管理 Unix / Linux - 网络通信实用程序 Unix / Linux - vi编辑器教程 Shell Scri

    2024年02月03日
    浏览(58)
  • Cognos教程_编程入门自学教程_菜鸟教程-免费教程分享

    Cognos 教程 数据仓库 - 概述 数据仓库 - 架构 数据仓库 - ETL 报告工具 Cognos - 简介 Cognos - 组件和服务 Cognos - 连接 Cognos - 包 Cognos - Framework Manager Cognos - 元数据模型中的关系 Cognos - Query Studio Cognos - 特别报告 Cognos - 报告类型 Cognos - 创建报告 Cognos - 打开现有报告 Cognos - 向报表添加

    2024年02月11日
    浏览(36)
  • CouchDB教程_编程入门自学教程_菜鸟教程-免费教程分享

    CouchDB教程 CouchDB - 简介 CouchDB - 安装 CouchDB - Curl和Futon CouchDB - HTTP API CouchDB - 创建数据库 CouchDB - 删除数据库 CouchDB - 创建文档 CouchDB - 更新文档 CouchDB - 删除文档 CouchDB - 附加文件 CouchDB - 有用的资源

    2024年02月10日
    浏览(41)
  • WPF教程_编程入门自学教程_菜鸟教程-免费教程分享

    WPF教程 WPF - 概述 WPF - 环境设置 WPF - Hello World WPF - XAML概述 WPF - Elements Tree WPF - 依赖属性 WPF - 路由事件 WPF - 控件 WPF - 布局 WPF - 布局嵌套 WPF - 输入 WPF - 命令行 WPF - 数据绑定 WPF - 资源 WPF - 模板 WPF - 样式 WPF - 触发器 WPF - 调试 WPF - 自定义控件 WPF - 异常处理 WPF - 本地化 WPF - 互

    2023年04月27日
    浏览(48)
  • Python教程_编程入门自学教程_菜鸟教程-免费教程分享

    Python - 教程 Python - 概述 Python - 环境设置 Python - 基本语法 Python - 变量类型 Python - 基本运算符 Python - 决策 Python - 循环 Python - 数字 Python - 字符串 Python - 列表 Python - 元组 Python - 字典 Python - 日期和时间 Python - 功能 Python - 模块 Python - 文件I / O. Python - 异常处理 Python - 面向对象

    2024年02月02日
    浏览(42)
  • CakePHP教程_编程入门自学教程_菜鸟教程-免费教程分享

    CakePHP教程 CakePHP - 概述 CakePHP - 安装 CakePHP - 文件夹结构 CakePHP - 配置 CakePHP - 电子邮件配置 CakePHP - 路由 CakePHP - 生成URL CakePHP - 重定向路由 CakePHP - 控制器 CakePHP - 视图 CakePHP - 扩展视图 CakePHP - 查看元素 CakePHP - 查看事件 CakePHP - 使用数据库 CakePHP - 查看记录 CakePHP - 更新记录

    2024年02月12日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包