Lion 莱恩呀
专注于后端全栈开发技术研究与分享。覆盖领域包括但不限于:C/C++底层原理与实践、Linux系统编程与运维、数据库(SQL/NoSQL)设计与优化、分布式系统架构与实现、主流中间件应用与源码、云原生(容器、K8s等)技术栈。致力于分享实战经验、系统设计思路与前沿技术洞察。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【043】解密C++ STL:深入理解并使用queue容器
深入探讨queue容器的核心特性及其底层实现。queue是一种遵循先进先出(FIFO)原则的数据结构,适用于需要按照顺序处理数据的场景,例如任务调度和广度优先搜索。我们将分析其不同的实现方式,如数组、链表和环形缓冲区,以及这些实现对性能的影响。此外,本文还将展示queue容器的常用API及其实际应用案例,包括高效算法和生产者-消费者模型,帮助读者更好地理解和利用这一重要数据结构。原创 2023-07-20 22:12:06 · 702 阅读 · 10 评论 -
【042】从零开始:逐步学习使用C++ STL中的stack容器
stack是一种先进后出(First In Last OutFILO)的数据结构,它只有一个出口,形式如图所示。stack容器允许新增元素,移除元素,取得栈顶元素,但是除了最顶端外,没有任何其他方法可以存取stack的其他元素。换言之,stack不允许有遍历行为。有元素入栈的操作称为:push,将元素推出stack 的操作称为pop。Stack所有元素的进出都必须符合"先进后出"的条件,只有stack顶端的元素,才有机会被外界取用。Stack不提供遍历功能,也不提供迭代器。深入讲解了C++ STL中的。原创 2023-07-18 23:06:12 · 1391 阅读 · 1 评论 -
【041】巧妙地穿梭双端:掌握C++ STL中deque容器的强大功能
在C++标准模板库中,deque(双端队列)作为一种灵活且高效的数据结构,为开发者提供了在两端快速插入和删除元素的能力。与vector相比,deque在内存管理和操作性能上有着显著的优势,使其在处理需要频繁修改的数据场景中表现更为出色。本文将深入探讨deque的基本特性、实现原理、常用API及其在实际应用中的价值,帮助开发者充分理解并利用这一强大的容器。通过实例分析,我们将展示如何在竞技类项目中运用deque进行高效的数据管理和处理。让我们一同揭开deque的神秘面纱,掌握这一高效的编程工具。原创 2023-07-16 18:00:15 · 715 阅读 · 9 评论 -
【040】C++中最强大的动态数组:掌握 vector 容器
在C++编程中,Vector容器作为一种高效的动态数组,实现了灵活的数据管理与操作能力。本文将全面深入地探讨Vector的基本结构、常用API及其高效应用。我们将从Vector的基本构造和数据存取操作开始,然后介绍如何使用标准库算法对数据进行排序和管理。除此之外,还将揭示一些优化技巧,如未雨绸缪机制和空间收缩方法,以提升程序性能。通过这些内容,读者将能够全面掌握C++ Vector的特性和应用,为高效编程打下坚实基础。原创 2023-07-16 00:58:14 · 953 阅读 · 1 评论 -
【039】探索C++ STL string容器的基本操作与鲜为人知的技巧
C++的标准模板库(STL)是现代编程的强大工具,而string容器在处理文本数据时尤为重要。本篇文章将详细介绍STL的基本概念和其六大核心组件,重点解析string容器的构造、赋值、拼接、查找、替换等常用操作。我们还将探讨string与C语言风格字符串的转换技巧及其实际应用示例。通过本篇指南,你将全面掌握string容器的操作方法,提升编程效率和代码质量。原创 2023-07-12 22:44:57 · 416 阅读 · 12 评论 -
【038】C++异常机制全景图:如何处理程序运行时错误?
C++异常机制是处理程序运行时错误的强大工具,它通过提供结构化的错误处理方式来提升程序的健壮性。本文将详细解析异常的基本概念、抛出与捕获的语法、栈解旋的机制以及异常的接口声明。通过对C++异常处理的深入探讨,您将能够掌握如何有效地捕获和处理各种异常情况,并了解自定义异常和标准异常的使用方法。接下来,让我们一步步探索如何在C++中优雅地管理异常。原创 2023-07-08 23:14:04 · 1169 阅读 · 4 评论 -
【037】C++中的四种强制类型转换:static_cast、const_cast、dynamic_cast和reinterpret_cast详解
在学习C++类型转换之前,了解正确的转换方式至关重要。本文深入探讨了C++中的类型转换方法,从隐式转换到动态转换,展示了安全转换的重要性。通过上行和下行转换的比较,引领读者探寻类型转换的安全边界。静态转换、动态转换和常量转换的细致解读,助您在C++编程中运用恰当的转换技巧。原创 2023-07-05 23:19:14 · 938 阅读 · 3 评论 -
【036】C++ 类模板实战:模仿vector容器实现自定义数组类
在C++编程的世界中,类模板如同一把瑞士军刀,为我们提供了一种强大的通用编程机制。从创建通用类到实现数据类型参数化,类模板的魅力无处不在。让我们深入探索类模板的奥秘,掌握如何设计、实现以及继承这一精妙的编程工具。原创 2023-07-04 23:25:34 · 554 阅读 · 1 评论 -
【035】深入理解C++类模板(最全讲解):从基础到实战
在现代C++编程中,类模板是一种强大的工具,能够让程序员编写通用的类,以处理各种不同类型的数据。本文将深入探讨C++类模板的核心概念和用法,从基础定义到实际应用,帮助读者全面理解如何利用类模板提升代码的灵活性和复用性。无论是如何定义和实例化类模板,还是如何处理类模板中的成员函数和友元,都将在本文中得到详细讲解。原创 2023-07-03 08:53:27 · 8320 阅读 · 2 评论 -
【034】C++函数模板的一切你都知道了吗?深入探索泛型编程的核心
在现代C++编程中,函数模板作为一种强大的工具,不仅能够显著减少代码重复,还能提升程序的灵活性和可维护性。本文深入探讨了C++函数模板的定义、使用方法以及实际应用技巧,旨在帮助读者从基础到高级层次掌握这一关键技术,为泛型编程提供坚实的理论基础和实用指南。原创 2023-07-02 14:03:16 · 761 阅读 · 9 评论 -
【033】C++ 多态技术深度解析:理解虚函数与纯虚函数(最全讲解)
虚函数是一种在基类中声明的函数,它在派生类中可以被重写(覆盖)的函数。在基类中使用关键字“virtual”声明的函数就是虚函数。虚函数通过动态绑定实现了多态性,使得程序可以根据实际对象类型来调用相应的函数。在运行时,系统会根据被调用的对象的类型来确定调用哪一个重写函数。虚函数是C++中实现多态的关键所在。定义方式:在成员函数前面加virtual修饰。注意:子类重写父类的虚函数时,返回值类型、参数类型、个数顺序 必须完全一致。多态的条件:有继承、子类重写父类的虚函数、父类指针指向子类空间。原创 2023-06-26 16:38:32 · 1874 阅读 · 9 评论 -
【032】C++高级开发:深入理解C++继承机制(最全讲解)
C++继承机制是面向对象编程的核心概念之一,它通过子类继承父类的属性和方法实现代码复用和扩展。以下是C++继承机制的总结:(1) 继承类型。C++中有3种继承类型:公有继承、私有继承和保护继承。(4)虚继承。当存在多个继承路径时,可能会导致同一个父类在内存中有多个拷贝,造成浪费和不一致。此时可以使用虚继承(virtual inheritance),让所有从同一基类派生出来的子类共享该基类,在内存中只保留一个拷贝。(5)多重继承。C++允许同时从多个父类继承属性和方法,称为多重继承。但需要注意解决命原创 2023-06-25 16:06:21 · 889 阅读 · 7 评论 -
【031】从基础到实践:深入解析C++运算符重载全攻略
C++重载运算符是一种允许程序员自定义运算符行为的机制。通过重载运算符,我们可以定义自己的类类型,并使其支持像加、减、乘等运算符,以及比较运算符等。在 C++ 中,有些运算符可以被重载(如 +, -, *, / 等),而有些则不能被重载(如 .,?: 等)。对于可以被重载的运算符,我们只需要按照一定的规则来实现相应的函数即可。重载函数必须是一个成员函数或者友元函数。如果是成员函数,则第一个参数必须是当前对象的引用或指针;如果是友元函数,则没有这个限制。不同的运算符要求不同的参数个数和类型。原创 2023-06-23 15:35:49 · 747 阅读 · 11 评论 -
【030】深入理解C++中的友元机制(friend)与最佳实践
C++中,友元(friend)是一种机制,它允许一个类的非成员函数或另一个类访问该类的私有成员。友元可以在类定义中声明,在类定义外部实现。类的主要特点之一是数据隐藏,即类的私有成员无法在类的外部作用域之外访问。但是有时候需要在类的外部访问类的私有成员,因此出现了友元函数;友元函数是一种特权函数,允许访问私有成员。可以把一个全局函数、或者类的成员函数、甚至整个类声明为友元。需要注意的是,友元机制破坏了类的封装性,因此应该谨慎使用。如果过度使用友元机制,会导致代码难以维护和扩展。原创 2023-06-21 22:58:20 · 1201 阅读 · 4 评论 -
【029】C++类对象中的静态成员和 this 指针详解
静态成员是类的属性,属于整个类而不是类的对象。可以在任何对象中访问它们,但不需要创建实例即可使用它们。使用静态成员变量时,必须在其前面加上“类名::”来指定其作用域。例如:ClassName::staticMemberVariable。静态成员函数也属于整个类,可以直接通过类名调用,并且不能访问非静态成员变量和函数。静态成员变量只有一个副本,在所有对象之间共享。当类的一个对象修改了这个变量时,其他对象也会受到影响。this 指针是指向当前对象的指针,在成员函数内部使用。原创 2023-06-18 22:33:58 · 527 阅读 · 0 评论 -
【028】深入理解C++ 类和对象:构造、析构、拷贝构造、初始化列表 详解(最全讲解)
C++构造函数是一种特殊的成员函数,用于初始化类的对象。它们具有与类名称相同的名称,并且不返回任何值(包括void)。它们可以带有参数或不带参数,根据需要进行重载。当创建一个类对象时,构造函数会被自动调用。如果没有定义构造函数,则编译器会提供一个默认的构造函数。默认构造函数不执行任何操作,但确保对象被正确初始化。在构造函数中,可以对数据成员进行初始化、分配内存空间和执行其他必要的操作类实例化对象的时候,系统自动调用构造函数,完成对象的初始化。原创 2023-06-15 23:06:35 · 934 阅读 · 9 评论 -
【027】C++类和对象的基本概念:封装、定义、设计与实现
本文深入浅出地介绍了 C++ 类,从封装性、定义、设计到实现,循序渐进地讲解了 C++ 类在面向对象编程中的重要作用。文章首先阐述了类封装性的概念和优势,包括数据隐藏、可控制性、简化编程和提高安全性。接着,详细讲解了 C++ 类定义的语法和格式,并通过实例演示了如何定义一个类。随后,文章以 Person 和 Cube 类为例,展示了如何设计一个类,并提供了设计步骤和代码示例。最后,文章介绍了类成员函数在类内和类外实现的方法,以及如何在多文件中实现类,并总结了 C++ 类在面向对象编程中的应用和优势。原创 2023-06-14 09:22:29 · 658 阅读 · 9 评论 -
【026】C++ 函数进阶:内联函数、重载、默认参数、占位参数
本文深入浅出地介绍了 C++ 中函数的几个重要概念:内联函数、函数重载、默认参数、占位参数以及 extern "C。首先,文章详细阐述了内联函数的定义、语法、使用场景以及注意事项,并与宏函数进行了对比。接着,文章介绍了函数重载的概念、实现原理以及使用条件,并解释了为什么返回值不能作为重载的条件。然后,文章讲解了函数默认参数的定义、使用方法以及需要注意的细节,并展示了默认参数与函数重载同时出现时可能产生的二义性问题。此外,文章还介绍了占位参数的概念、作用以及使用场景,阐述了 extern "C 的作用原创 2023-06-13 08:27:55 · 712 阅读 · 6 评论 -
【025】C++对C的扩展之引用(reference):让你的代码“指哪打哪”
引用是一个别名,可以将一个变量与另一个变量关联起来。通过引用,我们可以使用两个不同的名称访问相同的数据。引用必须在定义时初始化,一旦引用被初始化为一个对象,它就不能再绑定到另一个对象上了。引用作为函数参数传递时,可以避免复制大型对象的开销,并且可以直接修改原始对象。可以使用const修饰符使引用成为只读引用,这样就无法通过该引用修改原始数据。引用还可以返回函数中的值或对象,在这种情况下,函数返回类型必须是引用类型。指向常量的指针和常量引用之间有所不同:前者可重新赋值而后者不能重新赋值。原创 2023-06-12 09:05:29 · 756 阅读 · 0 评论 -
【024】C++ 命名空间:代码中的“隔离墙”
C++命名空间(namespace)是一种将标识符封装起来的机制,以避免命名冲突和全局污染。通过在命名空间中定义变量、函数、类等,可以使得这些标识符只在该命名空间内可见,从而避免与其他代码产生冲突。原创 2023-06-11 12:49:54 · 589 阅读 · 2 评论 -
【023】C/C++数据结构之链表及其实战应用
链表(Linked List)是一种常见的数据结构,它由若干个节点(Node)组成,每个节点包含一个数据元素和指向下一个节点的指针。相邻两个节点之间通过指针连接起来,形成了链式结构。链表可以分为单向链表、双向链表和循环链表三种类型。其中单向链表每个节点只有一个指向下一个节点的指针;双向链表每个节点除了有指向下一个节点的指针外,还有指向前一个节点的指针;循环链表则是将最后一个节点的指针指向头结点,使得整个链条形成了一个闭环。原创 2023-06-09 09:55:54 · 957 阅读 · 0 评论 -
【022】C++的结构体、共用体以及枚举详解(最全讲解)
结构体是一种自定义的数据类型,它可以包含多个不同的数据类型的成员。结构体允许用户将相关的数据项组合在一起形成一个单独的实体,并可以对该实体进行操作。结构体通常被用于表示复杂的对象或记录,如人员信息、学生档案等等。结构体由一个或多个成员变量组成,每个成员变量都可以有不同的数据类型和名字。结构体也可以嵌套定义在其他结构体中,以实现更复杂的数据模型。在 C/C++ 语言中,结构体是一种非常重要的数据类型,在很多编程领域都得到了广泛应用。int num;char sex;int age;原创 2023-06-07 11:55:40 · 1073 阅读 · 0 评论 -
【021】C/C++ 语言初学者必备:字符串处理函数入门
strlen:计算字符串的长度,即字符数组中不包括'\0'字符的字符数。strcpy:将一个字符串复制到另一个字符串中,包括'\0'在内。strncpy:将一个字符串的前n个字符复制到另一个字符串中,如果源字符串长度小于n,则会在末尾加上'\0'。strcat:将两个字符串连接起来,即将第二个字符串拼接到第一个字符串后面,并在末尾添加'\0'。strncat:将两个字符串的前n个字符连接起来,如果源字符串长度小于n,则会在末尾添加'\0'。strcmp:比较两个字符串是否相等,返回值为0表示相等。原创 2023-06-06 09:55:25 · 1062 阅读 · 0 评论 -
【020】C++ 动态内存分配:new 和 delete 的正确使用
C++中的动态内存分配是在程序运行时根据需要进行内存空间的分配和释放,与静态内存分配相比,具有更大的灵活性和适应性。动态内存分配可以通过new和delete或者malloc()和free()等函数实现。在程序运行时无法确定所需的内存大小。需要在多个函数之间共享数据,并且数据可能被频繁地创建和销毁。静态数组无法满足需求,例如需要支持可变长度数组。如果在动态分配内存后忘记了释放它,则会导致内存泄漏。为避免内存泄漏,可以使用智能指针或手动管理内存的方式来释放动态分配的内存。原创 2023-06-05 10:36:22 · 1192 阅读 · 0 评论 -
【019】C++ 中的强大组合:指针与函数
C++中指针和函数有着紧密的联系,指针可以用来存储函数的地址,通过指针调用函数或者将函数作为参数传递给其他函数。原创 2023-06-04 11:13:54 · 1368 阅读 · 0 评论 -
【018】指针的指针: C++ 指针数组、数组指针深入解析
指针数组和数组指针是C++中比较常见的两种概念,它们都与数组和指针有关。指针数组:指针数组是一个数组,其中每个元素都是一个指针。数组指针本质上是指针变量;保存的是数组的首地址。数组指针+1跳过的是整个数组。原创 2023-06-03 20:29:26 · 1217 阅读 · 0 评论 -
【017】C++ 指针变量详解:内存访问的奥秘
对于32位平台的进程,其内存空间大小限制为4GB(2的32次方),其中1GB是操作系统保留的虚拟地址空间。因此,32位进程最多只能使用3GB的内存空间。而对于64位平台的进程,其内存空间大小限制高达16EB(2的64次方),实际上远远超过了目前可用的物理内存容量。这意味着64位进程可以利用更多的内存资源来提高应用程序性能和响应速度。系统为内存的每一个字节分配32 bit / 64 bit 的地址编码(虚拟地址),这个编号称为地址。原创 2023-05-31 09:56:43 · 2463 阅读 · 0 评论 -
【016】C++ 预处理:内存分区、变量存储、头文件、宏,你都掌握了吗?
C++预处理器是一个非常重要的编译阶段,它在源代码被编译之前对源代码进行一些操作。#define:定义宏常量或宏函数,可以提高代码的可读性和可维护性。:条件编译指令,用于根据条件选择是否编译某段代码。#include:包含头文件,将其他源代码文件中的定义导入到当前文件中以供使用。#pragma:通用预处理命令,用于指示编译器执行特定的动作或更改默认行为。#error:产生错误消息并停止编译过程。#undef:取消已定义的宏。除了上述常见预处理指令外,C++还有一些其他的预处理功能,例如。原创 2023-05-29 13:38:55 · 1209 阅读 · 0 评论 -
【015】C++ 编程的核心技能:函数,你真的了解它吗?
C++ 函数是一个可以重复使用的代码块,它们通常包含了一些指令和算法,用于实现特定的任务。函数能够提高程序的模块化程度,使代码更加清晰简洁、易于维护。函数是c语言的功能单位,实现一个功能可以封装一个函数来实现。定义函数的时候以功能为目的,根据功能去定函数的参数和返回值。返回类型:函数返回值类型函数名:函数名称参数列表:传递给函数的参数及其数据类型函数体:执行具体任务的代码块返回类型:函数返回值类型函数名:函数名称参数列表:传递给函数的参数及其数据类型。原创 2023-05-28 20:43:42 · 851 阅读 · 1 评论 -
【014】一维、二维字符数组:你不知道的C++ 字符串存储奥秘!
C++ 中的一维字符数组和二维字符数组都是常用的数据类型,它们可以存储和操作大量字符数据。初始化方式:直接赋值或循环赋值访问方式:使用下标访问(从 0 开始)初始化方式:直接赋值或循环赋值访问方式:使用双重循环遍历每个元素,先遍历行数再遍历列数。原创 2023-05-27 19:37:02 · 2081 阅读 · 1 评论 -
【013】C++数组之一维数值数组和二维数值数组的概念和操作方法
数组名和[]表示数组。将数组的个数放入[]中。用元素类型定义一个变量。数组的大小定义时必须指定,并且不可更改。int arr[5];// 定义一个包含5个整型元素的数组// 定义一个包含10个单精度浮点型元素的数组// 不指定数组大小,直接用花括号赋值// 定义一个包含100个字符元素的数组,并初始化为字符串"Hello World"以上示例中,第一个和第二个示例分别定义了一个整型和单精度浮点型的一维数值数组。第三个示例使用了花括号对数组进行初始化,编译器会自动计算出该数组大小为4。原创 2023-05-26 11:24:01 · 1766 阅读 · 1 评论 -
【012】细数C++循环控制:for、while、do-while,看看你掌握了多少?
C++提供了三种循环控制语句:for循环、while循环和do-while循环。它们的主要区别在于条件判断的位置和执行顺序。下面对这三种循环控制语句进行总结:for循环。for循环通常用于已知重复次数的情况下,在for循环中,初始化表达式只会在第一次迭代前执行一次,更新表达式则在每次迭代后执行一次。只有当条件表达式为true时,才会进入待执行的语句块。while循环。原创 2023-05-25 08:30:00 · 3393 阅读 · 2 评论 -
【011】C++条件控制语句全解析:if、switch一网打尽!
在C++编程中,条件控制语句是至关重要的部分,能够根据不同的条件执行相应的代码路径。本文深入探讨了C++中最常用的条件控制语句:if语句和switch语句。首先介绍了它们的基本语法和用法,包括if语句的单条件、双条件和多条件形式,以及switch语句的多路分支控制。然后,通过丰富的示例和场景说明,展示了在实际编程中如何灵活运用这些语句,提高代码的效率和可读性。原创 2023-05-24 08:30:00 · 1820 阅读 · 1 评论 -
【010】掌握C++运算符:编程基础的深入研究
本文深入探讨了C++中的各种运算符,从基本的算术运算符到复杂的位运算符和条件运算符。通过详细的解释和示例代码,了解了这些运算符的功能、用法和注意事项。原创 2023-05-23 08:30:00 · 3603 阅读 · 3 评论 -
【009】探索C++中的转义字符和类型转换:发现编程的魔法
本文深入探讨了C++中的转义字符和类型转换,从基础概念到高级应用,为读者呈现了一个完整的指南。首先,我们介绍了转义字符的概念及常见用法,探讨了转义字符在C++中的重要性和实际应用场景。其次,我们详细分析了八进制和十六进制转义的规则和用法,帮助读者更好地理解这些特殊转义方式。然后,我们深入探讨了类型转换的原理和机制,包括自动转换和强制转换,以及它们在不同场景下的应用和影响。接着,我们介绍了C++中类型转换的新特性和扩展,包括隐式转换和显式转换,以及这些转换方法的具体用法和示例。原创 2023-05-22 08:30:00 · 1752 阅读 · 2 评论 -
【008】C++必备知识:const、volatile和sizeof等重要关键字的秘密功能细说
C++中的一些重要关键字:auto:用于自动推断变量类型。const:用于定义常量,表示变量的值不可更改。static:用于静态变量和静态函数的声明。extern:用于声明在其他文件中定义的全局变量或函数。inline:用于行内函数的定义。friend:用于声明友元函数或友元类。virtual:用于定义虚函数,实现多态性。new/delete:用于动态分配和释放内存。try/catch/throw:用于异常处理。typedef:用于给已有类型定义一个别名。原创 2023-05-21 09:30:00 · 826 阅读 · 6 评论 -
【007】C++编程必知:原码、补码、反码的全面解读
计算机存储的是数据的补码。原码:计算机中对数字的二进制定点表示方法。比如123的原码是0111 1011。无符号数:原码=反码=补码。有符号数:要分正数和负数,正数的最高位为0,负数的最高位为1。其中,正数的原码、反码、补码都是相同的;负数的反码等于原码的符号数(最高位)不变,其他位取反;补码等于反码+1。比如:-123的原码是1111 1011,反码为1000 0100,补码为1000 0101。原码、补码和反码都是用于计算机表示有符号整数的方法。原创 2023-05-20 09:30:00 · 2613 阅读 · 20 评论 -
【006】深入了解C++中的进制转换:二进制、八进制、十进制、十六进制
二进制:0~1,以0b开头,bitset< 8 >输出。八进制:0~7,以0开头,oct输出。十进制:0~9,以数字开头,cout默认输出十进制。十六进制:0 ~ 9和A ~ F,以0x开头,hex输出,不区分正负。n进制:0~n-1。C++ 中常见的数字进制有十进制、二进制、八进制、十六进制。从十进制转换到其他进制:二进制:使用除以 2 取余数的方法,将得到的余数倒序排列即为二进制。八进制:使用除以 8 取余数的方法,将得到的余数倒序排列即为八进制。原创 2023-05-19 09:09:13 · 2162 阅读 · 1 评论 -
【005】C++数据类型解析:深入理解实型(浮点数)、有符号数和无符号数
实型数据类型:指具有小数点的数字,包括float、double和long double三种类型。float:单精度浮点数,占用4个字节。double:双精度浮点数,占用8个字节。long double:扩展精度浮点数,占用16个字节。有符号数:指可以表示正数、负数和0的数字,包括char、short、int和long四种类型。char:字符类型,通常占用一个字节,取值范围为-128到127或0到255。short:短整型,占用2个字节原创 2023-05-18 13:11:29 · 2807 阅读 · 1 评论 -
【004】C++数据类型之字符类型(char)详解
char类型表示单个字符,占用一个字节(8位),范围为-128~ 127或0~255(取决于是否使用有符号类型)。可以使用单引号将字符括起来,例如:‘a’、‘B’、'1’等。还可以使用转义字符表示一些特殊的字符,例如:‘\n’表示换行符、’\t’表示制表符等。char类型变量可以被赋值为字符常量、字符变量和字符表达式等。字符串是由多个字符组成的序列,可以用char数组或string类型表示。char类型也可以用于输入输出操作,例如:cin和cout等。原创 2023-05-17 08:30:00 · 17060 阅读 · 9 评论