C语言
文章平均质量分 80
精通C语言,具备扎实的编程基础和丰富的项目经验。擅长利用C语言进行底层系统开发,熟悉内存管理、指针操作等高级特性。具备良好的逻辑思维能力和问题解决能力,能够快速定位并优化性能瓶颈
残风也想永存
大一在读学生,冷静,沉着,无欲,无忧伤
展开
-
C语言:再探C语言指针
进行复习与补充在上期我们从指针的基础概念出发,再到对常见指针类型的讲解,相比大家对与指针的理解应该不成问题。这期博客主要就是对:函数指针应用()、函数指针数组的应用()、等进行深入讲解。原创 2024-07-22 14:31:32 · 944 阅读 · 1 评论 -
快速排序【全方面讲解快排,此文足以彻底扫盲】
本博客将会通过快速排序的思想,用C语言行代码实现(递归,非递归,挖坑法,前后指针法,以及快慢指针都是需要掌握的重点最后在推算出时间复杂度,分析快排的优缺点,以及说明其稳定性。废话不多说,正文开始。经过对快排思想的深刻理解,我们就知道找key的正确位置pivot,则成为快排是否能实现的关键,而找pivot,则有三种方法(挖坑法,前后指针法,以及快慢指针而分治思想的的实践,有两种方法(递归,非递归下面所有代码的实现,都是以升序为目的。原创 2024-02-12 00:34:39 · 816 阅读 · 2 评论 -
二叉树第二期:堆的实现与应用
堆的定义:堆是一颗完全二叉树,且所有的父亲结点与子结点有相同的大小关系。大堆:所有的父亲结点的值 都比 子结点要大。小堆:所有的父亲结点的值 都比 子结点要小。上期,我们讲过,对于完全二叉树,若用数组的下标0,1,2...,从左到右依次表示第一层,第二层...,则父亲结点与子结点的关系,可用下标表示出来。而堆本身就是一种特殊的完全二叉树,所以用顺序结构表示堆,再简单不过~原创 2024-06-30 15:00:19 · 986 阅读 · 11 评论 -
【C语言/数据结构】队列:从概念到队列的实现
队列是一种特殊的线性表,只允许在一端插入数据,在另一端删除数据;插入数据的一端叫做队尾,插入数据的一端叫做队头;其有着先进先出的准则,FIFO(First In First Out)。原创 2024-05-16 15:55:49 · 574 阅读 · 20 评论 -
探索数据结构:链表的应用(带环链表的问题解决)
a.证明:慢指针走一步,快指针走两步一定可以?b.证明:快指针走三步、四步、....可行吗?原创 2024-05-01 22:47:23 · 385 阅读 · 18 评论 -
【C语言】贪吃蛇详解(附源码)
win32 API 的函数接口使用需要引头文件system() 库函数的使用需要引用头文件打印宽字符,必须事先本地化;你得保证自己的一切操作是windows控制台上执行的,而不是终端上面,修改方法,上边的横栏右键,点击设置,将windows终端,改为windows控制台即可~原创 2024-04-25 19:01:08 · 5100 阅读 · 18 评论 -
【C语言】翻译环境与运行环境
在我们学习C语言的时候,第一个接触的程序就是:在屏幕上打印” hello word!“,可当时的我们却未去深入的理解与感悟,一个程序代码是如何运行的;而这一期的博客,则是带着我们,通过C代码去理解源文件是如何生成可执行程序。首先我们得总体的知道,源文件经过编译+链接生成可执行程序;编译的目的是编译器将所有的源文件,生成一个目标文件(windows中扩展名为.obj,Linux中扩展名是.o),目的是将C代码转换为计算机可识别的指令;原创 2024-04-04 17:27:14 · 497 阅读 · 9 评论 -
【C语言】结构体与位段
我们之前学习过定义一个整型类型的变量又或者定义一个浮点型类型的变量...,这些变量可以描述一个整数又或者描述一个小数...,可无论是整数还是小数...,它们也只是简单对象。如果我们想要描述像一本书,一个人这种复杂对象,用我们之前学习过的类型去描述是完全不够的。一本书包含着很多信息,如书名、价钱、作者、出版时期...。我们会发现书的其中一个信息的表示我们是学过的,我们也能将其描述出来,如书名啊,作者啊,可以用字符数组,价钱啊,可以用整型...。原创 2024-03-24 13:02:07 · 1091 阅读 · 9 评论 -
【C语言】函数atoi的详解与实现~
若该字符串的起始位置没有空白字符,则等效于直接进入了第三步。(这里图形与代码的结合来阐述它的特点)原创 2024-03-21 15:08:56 · 596 阅读 · 8 评论 -
【C语言】数据在内存中的存储(包含大小端字节序问题)~
我们在刚开始学习C语言的时候,就接触到了很多数据的不同类型。我们也知道,数据是存储在一块内存空间的,且我们只知道数据的类型决定着,该数据在内存中所占内存空间的大小,且超过一个字节的数据在内存中存储的时候,就有(以字节为单位)存储顺序的问题。可我们更应该知道,数据不仅仅只是存储到指定的空间就完事了,而是不同类型的数据有它相对应的存储原则的。这篇文章就是讲解不同类型的数据是在内容中的存储方式+大小端字节序。(本篇文章只对整型家族与浮点型家族对其在内存中的布局进行详解)待更~原创 2024-03-19 19:00:00 · 979 阅读 · 3 评论 -
【C语言】内存函数~
上期我们讲解了与字符相关的函数:其中就有strcmp()字符串比较函数;strcpy()字符串拷贝函数;他们都能对内存进行一定的操作,可是却无法处理一些非字符串的数据。而这里我将介绍这四个函数:分别是memcpy();memmove();memset();memcmp()。原创 2024-03-18 05:00:00 · 1812 阅读 · 5 评论 -
【C语言】整型提升与算术转换
所以,表达式中各种⻓度可能⼩于int⻓度的整型值,都必须先转换为int或unsigned int,然后才能送⼊CPU去执⾏运算。表达式的整型运算要在CPU的相应运算器件内执⾏,CPU内整型运算器(ALU)的操作数的字节⻓度⼀般就是int的字节⻓度,同时也是CPU的通⽤寄存器的⻓度。整型算术运算的时候,像char类型,short类型,反正就是类型所占字节的大小小于int类型的,通常会先转换为int类型,进行运算。有符号的整数根据变量的数据类型的符号位数字来提升(如负数整型,高位补1,正数类型,高位补0);原创 2024-03-16 21:15:31 · 433 阅读 · 9 评论 -
【C语言】字符(串)函数详解~
这一期的博客,将会着重讲解常见的字符或字符串的相关库函数。C语言中有一组库函数专门用来处理字符类型的数据的,后文则会介绍字符分类函数以及字符转换函数。字符串相关的函数是本篇博客的重点,这也是为什么标题是字符串函数详解。我们不但会学习这些库函数的使用,而且对一些重要的库函数进行模拟实现,以学习他的算法思想也是重中之重,这对我们日后的C语言的学习的提升有着很大的帮助。字符函数的头文件:字符串函数的头文件:原创 2024-03-16 14:51:59 · 931 阅读 · 12 评论 -
C语言:从基础到精通指针
初始指针(0):着重于讲解指针的概念、基本用法、注意事项、以及最后如何规范使用指针深入指针(1):讲解指针变量常见的类型,如何去理解这些类型、最后就是如何正确的使用深入指针(2):讲解指针较为高阶的用法,理解难度 中度深入指针(3):在(2)的基础上,再讲解其余指针类型的高级用法,理解难度 偏难深入指针(4):指针相关的题目、及答案。理解难度 中度。原创 2024-03-09 17:39:49 · 874 阅读 · 18 评论 -
分支语句[归纳]
如图是 if 语句最简单的逻辑应用,下面代码展示注:if后面若仅跟一条语句,则后面的 {} 可加可不加,有 {} 的意思是,语句块,你若if里面的条件表达式成立,你必须把我这整个语句块的代码,都执行完,所以:若后面有多条要执行的语句,你不加 {} ,则默认第一条语句,受if语句控制;在C语言中,除了 if 语句,可以表达分支以外,C语言也提供了switch语句来表达分支。若要表示多分支的逻辑,用多个case即可完成。原创 2024-01-10 23:41:12 · 391 阅读 · 0 评论 -
柔性数组【详解】
两者区别就是,用柔性数组开辟的动态空间,在堆区上是连续的。而利用指针开辟的动态空间,与另外几个成员名,是不连续的。就算结构体变量也在堆区上开辟,那由malloc的脾气,在堆区任意开辟一片足够的空间,你用malloc开辟两次空间,那肯定不连续。其三,用malloc()动态开辟超出结构体类型大小的内存空间,以满足数组预期的的大小,C99规定,在一个结构体类型中,最后一个成员类型名是未定大小的数组,则为柔性数组。其一,不占据sizeof()返回结构体类型的大小的内存,其二,柔性数组前面至少包含一个元素,原创 2023-12-09 12:34:00 · 453 阅读 · 0 评论 -
如何写出随机数的代码?【超详,一键扫盲区】
在调用rand函数前,先调用srand函数,通过srand函数的参数,来调整rand函数产生随机数所依赖的基准值,只要种子是变化的,rand函数每次产生的随机数序列也就变化了起来。是因为rand函数是依靠基准值种子进行运算产生的随机数,所以我们要产生真的意义上的随机数,就得让这个种子是变化的。用来产生一个伪随机数,其范围是0~RAND_MAX ,具体的最大值,是依靠翻译器实现,我用的VS编译器,其值是32767。看种子设值为1的时候,和前面的两张图的五次的打印值是一样的。作用:用来初始化随机数生成器。原创 2023-12-31 16:52:33 · 776 阅读 · 2 评论 -
动态内存管理
在C语言中,我们创建数组的时候,要么对齐进行初始化,要么表明数组的大小,且数组的大小表明的时候,只能用常量(虽然C99标准中允许了这种行为,但是没有流行起来,这样写在VS上面是错误的。在使用的时候,为了培养我们良好的代码风格,故需要用一个if语句,来判断是否申请空间失败,而返回的空指针,一般我们会用上strerror函数,与errno的宏定义,这样会打印出我们错在哪里。在讲述free函数的时候,就已告知,free函数是专门用来释放动态开辟的内存空间,你若对非动态开辟的空间进行释放,其行为是未可知的。原创 2023-12-07 22:50:07 · 1294 阅读 · 1 评论 -
printf(scanf)【详解归纳】
头文件为intscanf(constcharformatargument...intprintf(constcharformatargument...在我们写代码的时候,以及刷oj的题的时候,会经常用到printf函数(从内存中打印信息到屏幕外),以及scanf函数(从键盘在输入信息到内存),那你有没有对这两则函数有更深刻的认识?下面将介绍它们的所以的“个性”。3.1 %c。原创 2023-12-23 14:43:22 · 1006 阅读 · 1 评论 -
文件管理【详解归纳】
二进制文件与文本文件:根据数据的存储形式,可以分为二进制文件,与文本文件,不经过转化,直接输入到外存的文件,称为二进制文件,计算机语言,一般是看不懂的,而文本文件,数据经过ASCII转化,存储到文件中,是人们所能读得懂的。这里,我们将庄梦涵.txt文档里的数据读取到变量lyy中,可能你们又要问,为什么我们不直接在同一个程序进行读和写呢,这里涉及了一个文件缓冲区的问题,如果你直接把if语句里的三条语句都运行,则程序会出错。而文件的存在则很好的解决了这一问题,我们写的数据可以存储在文件中,进行持久化的保存,原创 2023-12-12 00:13:39 · 1141 阅读 · 2 评论 -
函数栈帧的创建与销毁【此一篇,足以让卿彻底扫盲】
在经典的计算机科学中,栈被定义为一种特殊的容器,用户可以将数据压入栈中(入栈,push),也可以将已经压入栈中的数据弹出(出栈,pop),但是栈这个容器必须遵守一条规则:先入栈的数据后出栈(First In Last Out, FIFO)。指令1,指令2:mov,push,将b的值给eax,将eax的值压栈,改变esp的位置,指令3:指令4:mov,push,将a的值给ecx,将exc的值压栈,改变esp的位置。指令2,3,4:将a,b的值给eax寄存器,完成整数的减法,并将exa的值赋给z;原创 2024-01-24 20:48:49 · 1299 阅读 · 6 评论