C语言
文章平均质量分 67
不会敲代码的小张:)
Keep going
展开
-
动态内存管理<C语言>
/在栈空间上开辟四个字节//在栈空间上开辟10个字节的连续空间空间开辟大小是固定的。数组在声明的时候,必须指定数组的长度,它所需要的内存在编译时分配。但是对于空间的需求,不仅仅是上述的情况。有时候我们需要的空间大小在程序运行的时候才能知道,那数组的编译时开辟空间的方式就不能满足了。这时候就体现出了动态内存开辟的价值。原创 2023-10-05 22:39:06 · 299 阅读 · 17 评论 -
C语言<自定义类型>结构体、枚举、联合
枚举是一个被命名的整型常数的集合,枚举在日常生活中很常见,例如“星期”这个词就是一个枚举,星期一、星期二、 星期三、星期四、星期五、星期六、星期日就是这个枚举里面的成员。enum Day//星期Mon,//0Tues,//1Wed,//2Thur,//3Fri,//4Sat,//5Sun//6这些成员都是有值的,默认从0开始,一次递增1,当然在定义的时候也可以赋初值enum Color//颜色RED=1,GREEN=2,BLUE=4。原创 2023-08-22 21:13:27 · 303 阅读 · 17 评论 -
<指针进阶>指针数组和数组指针傻傻分不清?
指针数组:是一个数组,数组的元素都是指针数组指针:是一个指针,它指向一个数组原创 2023-08-21 19:59:58 · 473 阅读 · 11 评论 -
数据结构<树和二叉树>顺序表存储二叉树实现堆排
1. 满二叉树:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是 ,则它就是满二叉树。2. 完全二叉树:完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。 要注意的是满二叉树是一种特殊的完全二叉树。原创 2023-08-20 20:19:14 · 1372 阅读 · 20 评论 -
数据结构【队列】值得一看!
队列,就是常用的数据结构之一。队列的特征是先进先出(First-In-First-Out),就相当于我们现实中排队的样子。队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,以及在表的后端(back)进行插入操作。和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。原创 2023-08-05 08:00:00 · 209 阅读 · 18 评论 -
【数据在内存中的存储】肝货满满
什么大端小端:大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中。这句话什么意思呢?接着往下看为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8 bit。原创 2023-01-05 00:57:15 · 518 阅读 · 32 评论 -
【函数】你上街买菜用的着函数吗?
如果库函数能干所有的事情,那还要程序员干什么?所以更加重要的是自定义函数。自定义函数和库函数一样,有函数名,返回值类型和函数参数。但是不一样的是这些都是我们自己来设计。//语句项 } //ret_type 返回类型 //fun_name 函数名 //para1 函数参数写一个函数找出两个整数的最大值x : y;return 0;}告诉编译器有一个函数叫什么,参数是什么,返回类型是什么,但是具体是不是存在,函数声明决定不了。函数的声明一般出现在函数的使用之前,原创 2022-12-15 08:30:00 · 1091 阅读 · 23 评论 -
函数栈帧的创建和销毁(详细讲解)
函数栈帧创建和销毁的过程在不同的编译器下实现会略有差异,具体细节是取决于编译器的,大体逻辑相同。本章以VS2019IDE环境演示相关寄存器:相关汇编命令:先看这段代码:转到反汇编:5.3函数栈帧的创建内容补充:接下来我们就一行行拆解汇编代码:函数栈帧的创建画图演示:main函数中的核心代码:画图演示:Add函数传参:画图演示:函数调用过程:画图演示:当我们跳转到Add函数,就要开始观察Add函数的反汇编代码了:画图演示:我们看一下反汇编代码:回到了call指令的下一条指原创 2022-12-06 08:00:00 · 483 阅读 · 31 评论 -
【调试】你是一名优秀的侦探吗?
说到调试,那肯定少不了Bug的存在,什么是Bug呢?那要从历史上第一个Bug说起,事情是这样的,一个称为“马克二型”的计算机,这还不是一个真正的电子计算机,它使用了大量的继电器。突然有一天马克二型死机了,最后定位到第70号继电器出错,发现一只飞蛾躺在中间,已经被继电器打死。于是用摄子将蛾子夹出来,用透明胶布贴到“事件记录本”中,并注明“第一个发现虫子的实例”。原创 2022-12-01 09:00:00 · 923 阅读 · 31 评论 -
(初阶结构体struct详解)一学就废
有了结构体的类型,那如何定义变量呢?struct Stu 相当于int, float…s1 相当于我们的变量名//名字 short age;//年龄 char sex [ 5 ];//性别 int id;//学号 };//全局变量 int main() {//结构体变量的定义 return 0;}那么如何初始化呢//名字 short age;//年龄 char sex [ 5 ];//性别 int id;//学号 };return 0;}原创 2022-11-28 18:42:42 · 328 阅读 · 5 评论 -
什么?隐藏自己的源码也能让别人正常使用?
假如有一天某公司看中了你的代码功能,那么怎样才能不让他们看到源码,又能让他们正常使用呢?原创 2022-11-25 17:59:43 · 873 阅读 · 1 评论 -
指针没那么可怕之初阶指针(简单易懂)
在内存中,每个字节都有自己的单元编号。原创 2022-11-23 16:45:29 · 183 阅读 · 4 评论 -
关机程序C语言(快来整蛊你的小伙伴吧)
当我们知道以上关机的命令的时候,就可以用代码的形式写一个让收到关机程序的小伙伴对你言听计从。在程序中输入关机命令:shutdown -s -t 60.写完发给你的朋友,相信他拎着刀十分钟就到你家楼下哈哈哈。输入:shutdown -a. 则会撤销关机命令.这边建议做好防护措施再发给整蛊对象。原创 2022-11-22 19:25:38 · 717 阅读 · 0 评论 -
冒泡排序(C语言)
对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。下面图中只是一个元素进行若干次排序,我们有十个元素,所以我们会排序9次。如果第一个比第二个大,就交换他们两个。针对所有的元素重复以上的步骤,原创 2022-11-18 23:51:19 · 168 阅读 · 1 评论 -
递归的使用
递归的含义递归的使用目录递归的含义递归的使用递归是什么? 程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中被广泛使用。一个过程或函数在其定义或说明中有直接或者间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似规模较小的问题来求解,大大的减少的程序的代码量。下面是我在某个网站看到的例子:1. 假设你在一个电影院,你想知道自己坐在哪一排,但是前面人很多,你懒得去数了,于是你问前一排的人「你坐在哪一排?」,这样前面的人 (代号 A) ..原创 2020-12-31 01:07:40 · 192 阅读 · 0 评论 -
qsort库函数和模拟实现
模拟实现qsort库函数先看一下qsort数据原型void qsort( void *base,//待排序的数据起始位置 size_t num,//排序的元素个数 size_t width,排序的元素宽度 int (*cmp)(const void *e1, const void *e2 ) );//函数指针-待比较的两个元素的比较函数这里是qsort库函数的使用...原创 2021-02-26 00:58:55 · 2037 阅读 · 3 评论 -
strlen三种模拟实现方法以及字符串操作函数和模拟实现(详解)
字符串操作函数求字符串长度·strlen长度不受限制的字符串操作函数strcpystrcatstrcmpstrlen函数以及模拟实现:字符串已'\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数(不包含 '\0' )。参数指向的字符串必须要以 '\0' 结束。注意函数的返回值为size_t,是无符号的。#include <stdio.h>#include <string.h>in..原创 2021-03-03 03:14:07 · 244 阅读 · 0 评论 -
结构体简介
结构体的初步了解结构体简介原创 2022-11-02 23:02:22 · 77 阅读 · 1 评论 -
猜数字游戏实现(C语言)
首先在屏幕上打印游戏菜单 并且程序至少会执行一次,所以我们用do…while循环语句,用switch语句来选择玩或者不玩。下面看一下game()函数如何实现的、rand和srand如何使用。原创 2022-11-05 02:38:20 · 371 阅读 · 0 评论 -
字符串逆序(递归实现)
字符串逆序递归实现非递归实现原创 2022-11-10 11:28:35 · 163 阅读 · 0 评论 -
三子棋游戏实现
1.调用test函数来进行打印和选择玩不玩游戏,最少执行一次,我们使用do while循环语句。假设3*3棋盘,三行元素一样或者三列元素一样,或者对角元素一样(空格除外)视为获胜。顺便讲一下在game.c文件中写函数的实现,我们需要在game.h中来进行声明。先打印" %c | %c | %c "2.game.h - 用来声明函数等。1.test.c - 测试的逻辑。3.game.c - 游戏的实现。紧接着进入game()函数内部。再打印 “—|—|—”原创 2022-11-13 01:16:24 · 559 阅读 · 0 评论 -
扫雷游戏实现(C语言)
在创建数组之前,我们需要知道数组有几行几列的元素,上面我们说了,需要在9*9的基础上多加两行。1.需要存放布置好的雷的信息,存放排查出雷的信息,所以我们需要两个二维数组。排雷的话,我们需要把布雷的数组和展示出来的数组都传过去,方便排雷和展示。2.排查坐标的时候为了防止坐标越界,我们给数组增加两行,增加两列。2.坐标输入正确的话,我们还需要判断:坐标是否被占用,坐标是不是雷。在布置雷之前,我们需要定义雷的个数在game.h头文件中。因为是布雷,所以我们只需要在布置雷的数组里进行操作。原创 2022-11-16 01:48:56 · 827 阅读 · 1 评论