C/C++合集
C/C++合集
2301_80863610
阿里云开发者社区专家博主 ,支付宝开发者社区优秀季度创作博主,支付宝社区问答官
展开
-
C语言复习概要(二)
数组是一组相同数据类型的变量集合,这些变量存储在连续的内存空间中。通过使用数组,我们可以减少声明多个变量的复杂性,尤其在需要处理大量数据时,数组显得尤为重要。函数是具有特定功能的一段代码,通过将复杂的操作封装成函数,可以实现代码的复用和模块化。函数有助于提高代码的可读性和维护性。原创 2024-10-05 10:43:07 · 715 阅读 · 81 评论 -
C语言复习概要(三)
递归是指一个函数调用自身来解决问题。递归通常用于分治法中,通过将问题分解成更小的子问题,递归地解决这些子问题,直到达到基本情况(递归终止条件)。本文通过讲解Visual Studio的调试技巧与C语言中的函数递归,展示了如何高效地调试代码以及如何通过递归解决复杂问题。掌握VS调试工具的使用可以帮助开发者更快地定位问题,而熟练运用递归能够让解决特定问题更加直观与简洁。通过结合这两部分内容,开发者可以更加高效地编写和调试代码。原创 2024-10-06 12:32:41 · 819 阅读 · 65 评论 -
C语言复习概要(一)
本文详细介绍了C语言的常见概念、数据类型、变量的声明与初始化、分支结构以及循环结构,并通过多个代码示例展示了如何使用这些基本构件编写C语言程序。通过学习这些内容,初学者能够更好地理解C语言的基本结构和逻辑控制,为后续的高级编程技巧打下坚实的基础。C语言的简单性和灵活性使其成为计算机科学中的核心编程语言。掌握了本文介绍的内容后,建议继续深入学习指针、数组、结构体、函数等高级话题,进一步提高编程能力。原创 2024-10-03 21:36:47 · 1778 阅读 · 90 评论 -
手撕C++入门基础
C++课程包括:C++语法、STL、高阶数据结构C++兼容之前学习的C语言打印hello world在这个代码中我们有很多地方不清楚头文件 #includemain函数上面的代码:using namespace std;打印hello world的代码:cout原创 2024-08-17 11:27:40 · 7969 阅读 · 101 评论 -
爆学C++之类和对象(上)
• class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后⾯分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的⽅法或者成员函数。• 为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,如成员变量前⾯或者后⾯加_ 或者 m开头,注意C++中这个并不是强制的,只是⼀些惯例,具体看公司的要求。原创 2024-08-19 11:26:25 · 1571 阅读 · 112 评论 -
手撕初阶数据结构之---排序
排序:所谓排序,就是使⼀串记录,按照其中的某个或某些关键字的⼤⼩,递增或递减的排列起来的操作。常见的排序算法直接插入排序的时间复杂度是O(N^2)这个是最差的情况下,就是大的在前面,小的在后面希尔排序就是直接插入排序的优化版本将时间复杂度优化为O(N^1.3)时间选择排序是雷打不动的O(N^2)堆排序是O(N logN)冒泡排序是O(N^2)在数组有序的情况下我们能优化成O(N),但是这种情况很少见。原创 2024-08-15 10:02:47 · 2059 阅读 · 99 评论 -
C语言---预处理详解
这⾥我们想想,写⼀个函数求2个数的较⼤值的时候,不同的数据类型就得写不同的函数。原创 2024-07-18 09:35:30 · 1194 阅读 · 41 评论 -
手撕数据结构---栈和队列的概念以及实现
栈:⼀种特殊的线性表,其只允许在固定的⼀端进⾏插⼊和删除元素操作。进⾏数据插⼊和删除操作的⼀端称为栈顶,另⼀端称为栈底。概念:只允许在⼀端进⾏插⼊数据操作,在另⼀端进⾏删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out)队列中的每一个数据是通过一个节点保存的,节点和节点之间是通过指针链接的,压栈:栈的插⼊操作叫做进栈/压栈/⼊栈,⼊数据在栈顶。队列的底层是链表,链表是由一个一个的节点组成。⼊队列:进⾏插⼊操作的⼀端称为队尾。出队列:进⾏删除操作的⼀端称为队头。原创 2024-07-30 09:56:19 · 2325 阅读 · 71 评论 -
手撕数据结构---------顺序表和链表
定义之前已经知道数组大小的数组定义之前不知道数组大小的数组---动态内存管理int *arr---定义一个指针sequence:流畅的 List:表那么对顺序表的定义1.已知顺序表的大小:静态顺序表:int size;//顺序表中有效数据的个数如果我们一开始不知道顺序表的大小的话,在后面代码生成的时候申请了大小,这就是动态顺序表对于顺序表,我们不一定是整型数组,可能是字符数组,那么这个时候我们就要用到typedef了,将数据类型重命名,因为这样会很方便的,如果一个个改的话就很麻烦。原创 2024-07-25 19:09:06 · 4580 阅读 · 64 评论 -
手撕数据结构之二叉树
向上调整:节点数量多的层*调整次数多节点数量少的层*调整的次数少向下调整:节点数量多的层*调整次数少节点数量少的层*调整次数多建议是使用向下调整算法进行建堆建堆的时间复杂度是O(N)下面的调整得物时间复杂度是O(N*logN)那么堆排序的时间复杂度是O(N*logN)TOP-K问题TOP-K问题:即求数据结合中前K个最⼤的元素或者最⼩的元素,⼀般情况下数据量都⽐较⼤。⽐如:专业前10名、世界500强、富豪榜、游戏中前100的活跃玩家等。原创 2024-08-06 09:33:15 · 2625 阅读 · 103 评论 -
数据结构----算法复杂度
数据是杂乱无章的,我们要借助结构将数据管理起来。原创 2024-07-22 14:38:30 · 1834 阅读 · 52 评论 -
手撕C++类和对象(中)
默认成员函数就是⽤⼾没有显式实现,编译器会⾃动⽣成的成员函数称为默认成员函数。⼀个类,我 们不写的情况下编译器会默认⽣成以下6个默认成员函数,需要注意的是这6个中最重要的是前4个,最 后两个取地址重载不重要,我们稍微了解⼀下即可。其次就是C++11以后还会增加两个默认成员函数, 移动构造和移动赋值,这个我们后⾯再讲解。默认成员函数很重要,也⽐较复杂,我们要从两个⽅⾯ 去学习:• 第⼀:我们不写时,编译器默认⽣成的函数⾏为是什么,是否满⾜我们的需求。原创 2024-08-26 08:29:24 · 1303 阅读 · 103 评论 -
C语言----自定义类型:联合和枚举
但是编译器只为最⼤的成员分配⾜够的内存空间。联合体的特点是所有成员共⽤同⼀块内存空间。像结构体一样,联合体也是一个或者多个成员构成的,这些成员可以是不同的类型。当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。联合体的特点是所有成员共⽤同⼀块内存空间。枚举常量是遵循作⽤域规则的,枚举声明在函数内,只能在函数内使⽤。我们可以使⽤ #define 定义常量,为什么⾮要使⽤枚举?define定义的话是全局的定义的。联合的大小至少是最大成员的大小。枚举的关键字是enum。原创 2024-06-20 10:56:52 · 1061 阅读 · 22 评论 -
C语言---编译和链接
在 ANSI C 的任何⼀种实现中,存在两个不同的环境。第1种是翻译环境,在这个环境中源代码被转换为可执⾏的机器指令(⼆进制指令)。第2种是执⾏环境,它⽤于实际执⾏代码。翻译环境就是编译和链接经过翻译环境的处理生成可执行程序(.exe文件)可执行程序在运行环境进行运行生成我们想要的结果那翻译环境是怎么将源代码转换为可执⾏的机器指令的呢?这⾥我们就得展开开讲解⼀下翻译环境所做的事情。其实翻译环境是由编译和链接两个⼤的过程组成的,⽽编译⼜可以分解成:预处理(有些书也叫预编。原创 2024-07-15 08:48:44 · 1340 阅读 · 42 评论 -
C语言---自定义类型:结构体
如果我们能保证将所有的double类型的数据的地址都对⻬成8的倍数,那么就可以⽤⼀个内存操作来读或者写值了。嵌套的结构体成员对齐到自己的成员中最大对齐数的整数倍处,结构体的整数大小就是所有最大对齐数(含嵌套结构体中成员的对齐数)的整数倍。位段的⼏个成员共有同⼀个字节,这样有些成员的起始位置并不是某个字节的起始位置,那么这些位。跟结构相⽐,位段可以达到同样的效果,并且可以很好的节省空间,但是有跨平台的问题存在。我们在涉及计算结构体的大小的问题的时候,就会面临结构体内存对其的问题了。原创 2024-06-19 10:48:05 · 1519 阅读 · 17 评论 -
C语言----数据在内存中的存储
1.正常存E的时候是E+中间值(127/1023),那么将这个取出来减去中间值就得到了E,对于M,将M取出+1就是我们要的M----这里的E不全为0或者不全为1。其实超过一个字节的数据在内存中存的时候,就有存储顺序的问题,按照不同的存储顺序,我们分为大端字节序存储和小端字节序存储。对于64位的浮点数,最高的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有效数字M。对于32位的浮点数,最高的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M。原创 2024-06-17 12:03:42 · 1416 阅读 · 23 评论 -
C语言----文件操作
scanf/printf 针对标准输入流(stdin)/标准输出流 (stdout) /格式化输入/输出函数fscanf/fprintf 针对所有输入流(stdin)/输出流(stdout) /格式化输入/输出函数第一种只能在键盘上输入和输出第二种可以在文件和键盘上输入和输出那么sprintf和sscanf有什么作用呢?sprintfsprintf作用就是将格式化的数据输入到指针str所指向的空间(字符串中)可以理解为将格式化的数据转换为字符串struct Sint age;原创 2024-07-03 11:03:50 · 2680 阅读 · 41 评论 -
C语言---操作符详解
• 算术操作符: + 、- 、* 、/ 、%• 移位操作符: >• 位操作符: & | ^• 赋值操作符: = 、+= 、 -= 、 *= 、 /= 、%= 、>= 、&= 、|= 、^=• 单⽬操作符:!、++、--、&、*、+、-、~ 、sizeof、(类型)• 关系操作符: > 、>= 、< 、<= 、 == 、!• 逻辑操作符: && 、||• 条件操作符:?• 逗号表达式: ,• 下标引⽤: []• 函数调⽤: ()原创 2024-05-09 19:04:13 · 1087 阅读 · 0 评论 -
C语言----深入理解指针(5)
sizeof计算变量所占内存空间的大小的,单位是字节sizeof只关注内存空间的大小,不在乎内存中方的什么数据sizeof是操作符不是函数sizeof会将\0算进去的那么strlen呢?strlen是c语言里面的库函数,是函数作用的求字符串长度的,只能针对字符串strlen统计的是字符串\0之前的字符个数只能指针字符串,求字符串长度不能求整形数组的strlen直到遇到\0,不然是不会停下来的。原创 2024-06-11 10:04:15 · 1420 阅读 · 24 评论 -
C语言--深入指针(1)二刷
祝大家观看愉快,早日成为大牛。原创 2024-05-30 18:26:41 · 586 阅读 · 0 评论 -
C语言----深入理解指针(1)
内存单元的编号 == 地址 == 指针cpu访问内存中的某个字节空间,必须知道这个字节空间在内存的什么位置,而因为内存中字节很多,所以需要给内存进行编址。原创 2024-05-20 18:10:13 · 720 阅读 · 0 评论 -
C语言----深入理解指针(3)
使用%s打印字符串的时候,只需要提供首字符的地址就行了//这里的赋值是讲字符串中首字符的地址存在p中。原创 2024-05-23 11:08:20 · 950 阅读 · 0 评论 -
C语言---扫雷游戏的实现
需要创建3个文件夹test.c----扫雷游戏的测试game.c----扫雷游戏的实现game.h----扫雷游戏的实现雷的信息使用二维数组存放• 使⽤控制台实现经典的扫雷游戏• 游戏可以通过菜单实现继续玩或者退出游戏• 扫雷的棋盘是9*9的格⼦• 默认随机布置10个雷• 可以排查雷扫雷的过程中,布置的雷和排查出的雷的信息都需要存储,所以我们需要⼀定的数据结构来存储这些信息创建两个数组,一个存放雷,1是雷,0不是雷第二个数组就存放排查出的雷的信息,避免太过混乱,原创 2024-05-28 12:42:24 · 882 阅读 · 0 评论 -
C语言----C语言内存函数
针对内存块来处理的mem--memmory--内存内存块就是一块内存。原创 2024-06-15 12:48:44 · 1206 阅读 · 20 评论 -
C语言--vs使用调试技巧
注:产品说明书中没有提到但是必须要做的事情,软件确没有实现。调试窗口中的自动调试会根据当前的位置将元素放出来,但是我们需要观察的元素可能会消失,一会有,一会没,试,也可能是隔离和屏蔽代码的⽅式,找到问题所的位置,然后确定错误产⽣的原因,再修复代码,调试是需要反复去动⼿练习的,调试是可以增加程序员对代码的理解和掌控的,掌握了调试的能⼒,调试是需要反复去动⼿练习的,调试是可以增加程序员对代码的理解和掌控的,掌握了调试的能⼒,运⾏时错误,是千变万化的,需要借助调试,逐步定位问题,调试解决的是运⾏时问题。原创 2024-07-01 08:51:56 · 1858 阅读 · 35 评论 -
C语言---深入指针(4)
对于qsort函数来说主要的就是括号内的第四个元素,也就是进行元素比较的函数的名字对于qsort来说,这个进行比较的函数只需要返回三种值大于0,小于0,或者等于0,只要传递回来就能直接快速排列对于qsort函数来说:第一个元素是要排列的数组的首元素的地址,就是数组名第二个元素就是这个数组的元素个数sz第三个元素就是每个元素的字节大小sizeof([0])第四个元素就是这个比较的函数的函数名对于这个比较函数就有说法了这个就是固定格式。原创 2024-06-08 14:45:40 · 1360 阅读 · 2 评论 -
C语言---深入指针(2)
数组名的地址就是数组首元素的地址,arr和&arr[0]如果是&arr,那么这个就是整个数组的地址了---&数组名。原创 2024-05-23 11:05:27 · 483 阅读 · 0 评论 -
C语言----函数
ret_type是用来表示函数计算结果的类型,函数的参数可以是void,明确表示函数没有参数//函数的定义int z = 0;z = x + y;return z;// return z把z的值返回到c里面int main()int a = 0;int b = 0;//输入//计算//使用函数,调用函数,调用函数就跑到1~7行调用函数了,把a传给x,b传给y//输出return 0;还有种更加简介的写法:// return z把z的值返回到c里面直接返回x+y。原创 2024-04-30 18:42:07 · 515 阅读 · 0 评论 -
C语言--函数递归与迭代
1.递归存在限制条件,但凡满足这个限制条件时,递归便不再继续2.每次递归调用之后越来越接近这个限制条件。原创 2024-05-04 16:00:14 · 911 阅读 · 0 评论 -
C语言----字符函数和字符串函数
在编程的过程中,我们要经常处理字符和字符串,为了方便操作字符和字符串,c语言标准库中提供的一系列库函数,接下来我们就开始学习与认识他们c语言中有一系列的函数是专门做字符分类的,也就是一个字符是属于什么类型的字符的这些函数的使用需要包含一个头文件:ctype.h。原创 2024-06-13 14:07:58 · 1538 阅读 · 19 评论 -
C语言---动态内存管理
指针+结构体+动态内存管理是学习数据结构的非常重要的知识这两种但是上述的开辟空间的⽅式有两个特点:• 空间开辟⼤⼩是固定的。• 数组在申明的时候,必须指定数组的⻓度,数组空间⼀旦确定了⼤⼩不能调整,但是对于空间的需求,不仅仅是上述的情况。有时候我们需要的空间⼤⼩在程序运⾏的时候才能知道,那数组的编译时开辟空间的⽅式就不能满⾜了。C语⾔引⼊了动态内存开辟,让程序员⾃⼰可以申请和释放空间,就⽐较灵活了。原创 2024-06-21 14:18:33 · 2105 阅读 · 40 评论 -
C语言---数据结构(1)--时间复杂和空间复杂度计算
时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间,在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。这里就不同了,因为我们使用malloc开辟了一个n+1个元素的空间,原本的变量就有5个,所以总共的变量就是N+6,但是6对结果的影响不大,所以这个题的空间复杂度就是O(N)了多少bytes的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。空间复杂度看的是我们最多的时候占了多少空间,也就是看最坏的情况的时候我们用了最大空间是多少。原创 2024-06-24 13:05:45 · 3726 阅读 · 34 评论 -
c语言常见概念----
库函数的使用要使用对应的头文件。原创 2024-04-14 21:23:53 · 827 阅读 · 1 评论 -
C语言-----分支和循环
if语句后面不加分号,默认情况下if和else语句后面只能跟一条语句,如果要使用多条语句,可以用{}将想要多条表达的式子放进去else总是和离他最近的if配对if语句中,0表示假,非0表示真。原创 2024-04-17 16:38:18 · 429 阅读 · 1 评论 -
C语言------数组
为了能够存放多个相同类型的数组,就有了数组!!数组是一组相同类型的元素的集合数组一般分为一维数组和多维数组数组在创建的时候可以指定数组的大小和数组的元素类型数组的语法格式:type arr_name ----------type指定的是数组中存放数据的类型,可以是char、short、int 、floatarr_name指的是数组的名字[ ]中的常量值是用来指定数组的大小,根据实际需要来定义数组是不需要取地址的。原创 2024-04-29 13:22:36 · 419 阅读 · 1 评论 -
c语言中数据类型和变量
printf=printf+format,按照一个格式来打印,除了%c以外,都会自动忽略起首的空白字符,scanf的占位符遇到空格会停止读取的//这其中的%d就是占位符printf()有n个占位符就应该有n+1个参数,拿第三行举例,"kai"和10算两个参数,对于printf(),"%s says it is %d o'clock"也算一个参数。printf("%5d\n",11234)// %5d调整数据的长度。原创 2024-04-14 21:43:41 · 424 阅读 · 0 评论