C语言之路
文章平均质量分 93
C语言笔记和深入理解
林先生-1
佛系……但致力于提高文章的文字水平。
展开
-
【C语言深入】带你了解C语言中的可变参数列表
name我们是否能自定义一个参数可变的函数呢?原创 2023-04-13 15:17:59 · 1774 阅读 · 0 评论 -
【C语言深入】逐汇编详解函数栈帧的创建和销毁过程
在正式开始之前,必须先要对我们将要用到的一些汇编指令和寄存器做一些了解。不需要深入理解,只需要了解一下它们的作用和含义即可。相关汇编指令数据转移指令,开辟空间并将数据写入空间数据入栈。同时esp栈顶寄存器也要发生改变数据弹出至指定位置,同时esp栈顶寄存器也要发生改变减法命令加法命令函数调用,1.压入返回地址2.转入目标函数通过修改eip,转入目标函数,进行调用恢复返回地址,压入eip,类似pop eip命令相关寄存器通用寄存器,保留临时数据。常用于返回值ebx;通用寄存器,保留临时数据栈底寄存器。原创 2023-04-08 19:33:00 · 845 阅读 · 2 评论 -
【C语言深入】深入理解程序的预处理过程
我们平时所写的每一个.c文件都会经过编译和连接的过程之后才会形成一个可执行程序:今天我们就来详细的看看编译和连接这两个过程的具体细节。程序的翻译环境与执行环境在ANSI C的任何一种实现中,存在两个不同的环境。第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。第2种是执行环境,它用于实际执行代码。而我们的编译和连接就是在翻译环境中完成的,当.c原文件经过翻译环境后就会形成一个.exe的可执行文件,而这个可执行文件执行所依赖的就是执行环境。原创 2023-04-05 21:04:59 · 573 阅读 · 3 评论 -
【C语言笔记】C语言文件操作全解
设想一下我们程序员在编写程序时候,可能用把程序所产生的数据文件存储到不同格式的文件之中,这些格式不同的文件的读写方式当然也是不同的,那么这岂不是要我们程序员要把这些读写方式全都掌握呢?但读写文件的方式可以多种多样的,fwrite和fread函数就是以二进制的形式进行读写文件,也就是将内存中的数据(内存中的数据全都是以二进制的形式存储的)直接写入文件中,不做任何转换。每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。原创 2023-04-01 17:29:51 · 854 阅读 · 2 评论 -
【C语言编程练习】手撕扫雷
既然是要通过输入的坐标来排查,就一定要对坐标的有效性做检查,只有当坐标有效是才执行后面的操作,如果被排查到的坐标是雷的话,游戏就直接结束。模式选定后我们紧跟着就要来创建我们的棋盘了,我们的棋盘board其实是一个二级指针,我们只需要为board申请row个int*类型大小的空间,然后再为每个board[i]申请col个int类型大小的空间。而且自定义模式也可以自定义雷的个数。因为我清晰的记得我的老师对我们说过:“如果你学完C语言之后,能够不作任何参考的写出扫雷游戏,那说明你的C语言是学的不错的”。原创 2023-03-30 17:19:49 · 278 阅读 · 3 评论 -
【C语言编程小练习】C语言实现简易通讯录
其实我们的删除并不需要真的将该联系人的信息销毁,我们只需要让其后面的联系人的信息覆盖到他的位置上即可。其中函数fread与函数,fwrite是很相似的,只不过是函数fread是将文件流中读取到的数据写到ptr所指向的空间中去。找到了就根据返回的下标index打印出对应的信息即可。因为文件中存储的数据可能超过了已初始化的默认容量的大小,所以我们在每次写入之前都要先检查是否需要增容,如果已满则增容后在写入。当然啦,这个函数是以二进制的形式写入的,所以有很多信息我们都是看不懂的,但没关系,计算机看得懂就行了。原创 2023-03-30 13:29:28 · 3366 阅读 · 1 评论 -
【C语言笔记】动态内存管理全解
C语言为我们提供了一个用于动态内存开辟的函数malloc,当一个程序员额外需要一些内存时,就可以调用malloc函数申请,malloc函数向内存池提取一块适合的内存,并向该程序返回一个指向这块内存的指针。但也有时候会开辟失败,开辟失败时,则会返回一个空指针NULL,所以为了避免对空指针的引用,在调用malloc函数结束之后,对其返回结果做出判断是很重要的。原创 2023-03-22 10:01:32 · 289 阅读 · 0 评论 -
【C语言笔记】自定义类型全解
在C语言中有一种数据类型称为“聚合数据类型”,它能同时存储一个或一个以上的单独数据,C中提供了两种类型的聚合数据类型,分别是数组和结构体。我们知道数组一组相同类型的元素的集合,但结构体中的元素类型是可以不相同的。所以数组可以用下标的方式进行反问(因为它每个元素类型相同),而结构体就不能用下标进行访问。原创 2023-03-19 15:45:01 · 553 阅读 · 1 评论 -
【C语言深入】再聊C语言中指针和数组到底有什么不同?!
C语言之所以要将传递给函数的数组参数转换为指针,主要还是出于对效率的考虑,我们知道形参是实参的一份临时拷贝,但要是一个整型数组长度为1000,如果不把数组转换成指针,那这份拷贝岂不是要占了4000个字节的空间?而且这样传过去的数据与主函数内的数据是没有任何关系的,如果想要对主函数内的数据进行修改的话是做不到的。声明指针时,编译器只为指针变量本身分配了内存空间,而并没有为指针指向的对象分配任何空间,但在声明数组的时候,不管有没有对数组进行初始化,编译器都会为数组分配好空间,只是空间内的值是未知的。原创 2023-03-16 19:24:19 · 1499 阅读 · 3 评论 -
【C语言库函数】各字符串函数的使用和模拟实现
strstr的功能就是求一个字符串是否是另一个字符串的字串,如果是就返回一个指向子串出现的第一个位置的指针,比如“ab”是“aab”的字串,将他们两个传入strstr返回的就应该是一个指向“aab”中第二个a指针,如果不是则返回空指针。比较的方法是逐个字母的比较如果当前比较的两个字母相等,则跳到下一个子母,若不相等,则这直接返回一个大于零或小于零的数。strcpy的功能就是将一个字符串的内容(包括其末尾的‘\0’)拷贝到另一个字符串中去,二strncpy则比它多出了个n,这个n表示的是要拷贝的字符的个数。原创 2023-03-16 07:40:28 · 168 阅读 · 0 评论 -
【C语言深入】细聊C语言中的“左值”和“右值”
这里需要注意的是任何变量在进行计算的时候,用的都是它的右值,所以表达时所产生的结果都是一个常量(也可以说是一个副本),所以对于指针的自加或自减(前置和后置都一样),其实分析方式都和上图一样,所以都是合法的右值,而不是一个合法的左值。对指针解引用时,它产生的结果也是既可以作为左值也可以作为右值,作为左值是它表示的是指针中存储的地址的那块空间,作为右值时它表示的是指针中存储的地址的那块空间中的内容。而且如今的编译器都是动态的分配内存空间的,也就是说程序这次执行和下一次执行时,同一个变量的地址是不同的。原创 2023-03-09 15:37:28 · 6774 阅读 · 4 评论 -
【C语言库函数】回调函数的应用qsort函数的模拟实现
qsort函数是C语言的一个库函数,它的头文件是stdio.h,这个函数的底层是用的是快速排序的思路,这个函数可以用来排序任何数据。原创 2023-03-06 15:45:14 · 111 阅读 · 2 评论 -
【C语言笔记】C语言数据类型转换
C语言中有很多数据类型,这些数据类型在内存中的存储形式不一样,为了计算方便,编译器不得不将某一种数据类型转换成另一种数据类型。本篇将介绍C语言中各种数据类型转换的规则。原创 2023-02-11 16:39:46 · 6193 阅读 · 1 评论 -
【C语言笔记】基本算术类型与其在内存中的存储方式+深入理解
C语言中有两大基本的算术类型,即整型和浮点型,对应现实生活中的整数和小数,本篇将给大家整理这两种基本算术类型的相关知识及其在内存中的存储方式。原创 2023-02-16 22:36:46 · 404 阅读 · 5 评论 -
【C语言笔记】函数详解
在维基百科中将函数定义为子程序——在计算机科学中,子程序(英语:Subroutine, procedure, function, routine, method,subprogram, callable unit),是一个大型程序中的某部分代码, 由一个或多个语句块组成。它负责完成某项特定任务,而且相较于其他代 码,具备相对的独立性。——一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软件库。----------引自维基百科。原创 2023-01-16 19:09:23 · 232 阅读 · 0 评论 -
【C语言笔记】C操作符详解
今天给大家带来C语言中操作符的详解。原创 2023-02-08 20:28:32 · 204 阅读 · 2 评论 -
【C语言笔记】C语言指针全解+深入理解
在我们的计算机中有成千上万个内存单元,这么多内存单元如果不规范管理起来,那将是很麻烦的。事实上,我们可以将各个内存单元看做是一个个房子,把这些房子用一个唯一的房号标识起来,这样就好管理多了。但是随着计算机的逐渐发展,内存空间也变得越来越大,那么这些“房号”势必也会变得越来越复杂和冗长,如果每次都要通过一个“房号”来寻找某个“房子”,那也是一件很让人头疼的事情。如果能有一个工具来帮助我们,管理这些“房号”就好了,比如把“房号”存放在一个工具里,需要查询的时候只需要从这个工具中查询出对应的“房号”即可。原创 2023-02-27 13:45:09 · 696 阅读 · 4 评论 -
【C语言】写一个和电脑上差不多的扫雷游戏(超详细教程!)
扫雷游戏是一个非常好的益智小游戏,我相信很多人都玩过,它的游戏规则也很简单,就是需要玩家在最短时间内排查出雷盘上所有非雷的格子,若格子不是雷就显示这个格子周围一圈有多少个雷,若点击到是雷的格子就被炸死。今天我给大用C语言实现一个和电脑上逻辑差不多的扫雷游戏。原创 2023-01-11 18:20:58 · 203 阅读 · 0 评论 -
C语言实现简易三子棋
今天给大家带来一个简易的三子棋的代码实现,希望大家喜欢。原创 2023-01-04 10:44:58 · 72 阅读 · 0 评论 -
C语言解决汉诺塔问题
汉诺塔(Tower of Hanoi)源于印度传说中,大梵天创造世界时造了三根金钢石柱子,其中一根柱子自底向上叠着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。--引自维基百科以上就是今天要讲的【汉诺塔问题】啦,只要大家能把图画明白,细心思考以下每一“阶段”移动方式,寻找“大事化小且原理相同”的解决办法,不必考虑细节实现方式,只要找到宏观规律即可。原创 2022-12-24 17:19:33 · 250 阅读 · 0 评论 -
【C语言笔记】分支和循环语句总结
因为C语言一直以来都是我们编程界的老大哥,网上也流行一句话叫做“C生万物”,所以学号C语言对我们编程能力的提高是非常重要的。但只可惜小编所在的学校竟没有安排C语言这门课程,所以小编只好自学,小编在网上找了很多很优秀的课程来看,感觉网上的老师们讲得都非常好,非常通俗易懂,又因为小编之前也学过java的课程,且Java与C语言的语法也是有很多相似之处的,所以小编就感觉学的很轻松。但是老师反复强调要“空杯心态”,要重视基础。所以小编今天内心的将之前学过的内容在整理总结一次,以牢固基础。原创 2022-12-18 20:15:57 · 83 阅读 · 0 评论