自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 贪吃蛇的简易实现

技术要点技术要点贪吃蛇的简易实现会运用到语⾔函数、枚举、结构体、动态内存管理、预处理指令、链表、Win32 API等,接下来首先简单介绍一下会运用到的东西。Win32 API介绍。

2024-01-31 18:06:54 825

原创 通讯录项目的实现以及动态顺序表(基于顺序表)

顺序表的底层结构是数组,对数组的封装,实现了常⽤的增删改查等接⼝,顺序表分为静态顺序表(使⽤定⻓数组存储元素)和动态顺序表(按需申请)静态顺序表缺点:空间给少了不够⽤,给多了造成空间浪费因为我们要做的是通讯录,所以能够保存⽤⼾信息:名字、性别、年龄、电话、地址等 增加联系⼈信息 删除指定联系⼈ 查找制定联系⼈ 修改指定联系⼈ 显⽰联系⼈信息这些功能是要包含实现的。接下来我们一步步实现改进!!!

2024-01-20 00:54:28 839

原创 c语言学习总结———编译和链接

(注:在Windows环境下的⽬标⽂件的后缀是 .obj ,Linux环境下⽬标⽂件的后缀是 .o)• 处理#include 预编译指令,将包含的头⽂件的内容插⼊到该预编译指令的位置。这个过程是递归进⾏的,也就是说被包含的头⽂件也可能包含其他⽂件。将源代码程序被输⼊扫描器,扫描器的任务就是简单的进⾏词法分析,把代码中的字符分割成⼀系列的记号(关键字、标识符、字⾯量、特殊字符等)。翻译环境是由编译和链接两个⼤的过程组成的,⽽编译⼜可以分解成:预处理(预编译)、编译、汇编三个过程。在独⽴的环境中,程序。

2024-01-15 21:29:36 675

原创 文件操作学习总结

如有整数10000,如果以ASCII码的形式输出到磁盘,则磁盘中占⽤5个字节(每个字符⼀个字节),⽽⼆进制形式输出,则在磁盘上只占4个字节(VS2019测试)。以ASCII字符的形式存储的⽂件就是⽂本⽂件。⽂件的内容不⼀定是程序,⽽是程序运⾏时读写的数据,⽐如程序运⾏需要从中读取数据的⽂件,或者输出内容的⽂件。字符⼀律以ASCII形式存储,数值型数据既可以⽤ASCII形式存储,也可以使⽤⼆进制形式存储。⼀个⽂件要有⼀个唯⼀的⽂件标识,以便⽤⼾识别和引⽤。磁盘上的⽂件是⽂件。⽂件标识常被称为⽂件名。

2023-12-19 20:59:50 490

原创 动态内存管理学习总结

包含柔性数组成员的结构⽤malloc ()函数进⾏内存的动态分配,并且分配的内存应该⼤于结构的⼤ ⼩,以适应柔性数组的预期⼤⼩。原有空间之后没有⾜够多的空间时,在堆空间上另找⼀个合适⼤⼩的连续空间来使⽤。并且数组在申明的时候,必须指定数组的⻓度,数组空间⼀旦确定了⼤⼩不能调整。C99 中,结构中的最后⼀个元素允许是未知⼤⼩的数组,这就叫做『柔性数组』成员。这个函数调整原内存空间⼤⼩的基础上,还会将原来内存中的数据移动到 新 的空间。指向的空间不是动态开辟的,那free函数的⾏为是未定义的。

2023-12-08 17:40:37 1302

原创 ⾃定义类型:联合和枚举学习总结

联合的成员是共⽤同⼀块内存空间的,这样⼀个联合变量的⼤⼩,⾄少是最⼤成员的⼤⼩(因为联合体⾄少得有能⼒保存最⼤的那个成员)。short c[7]是short类型,大小就为2*7=14,最大成员类型int型,大小为4,14不是4的倍数,所以取值16.以上就是枚举和联合体的基本概念和使用,一些比较基础的内容,万丈高楼平地起,所以基础也很重要!这些可能取值都是有值的,默认从0开始,依次递增1,当然在声明枚举类型的时候也可以赋初值。当最⼤成员⼤⼩不是最⼤对⻬数的整数倍的时候,就要对⻬到最⼤对⻬数的整数倍。

2023-12-02 19:40:38 486

原创 ⾃定义类型:结构体--学习总结

位段的⼏个成员共有同⼀个字节,这样有些成员的起始位置并不是某个字节的起始位置,那么这些位 置处是没有地址的。基本上这就是这次学习的内容了,重点是结构体对齐和位段(虽然位段不经常用),感觉这节课的内容还算好掌握把,可能是现在学的还是基础!4. 如果嵌套了结构体的情况,嵌套的结构体成员对⻬到⾃⼰的成员中最⼤对⻬数的整数倍处,结构。如果传递⼀个结构体对象的时候,结构体过⼤,参数压栈的的系统开销⽐较⼤,所以会导致性能的下降。体的整体⼤⼩就是所有最⼤对⻬数(含嵌套结构体中成员的对⻬数)的整数倍。

2023-12-01 01:36:24 1110

原创 数据在内存中的存储(学习总结)

⾸先,浮点数9.0 等于⼆进制的1001.0,即换算成科学计数法是:1.001×2^3 所以: 9.0 = (−1) ∗ 0 (1.001) ∗ 23 那么,第⼀位的符号位S=0,有效数字M等于001后⾯再加20个0,凑满23位,指数E等于3+127=130,即10000010 所以,写成⼆进制形式,应该是S+E+M。三种表⽰⽅法均有符号位和数值位两部分,符号位都是⽤0表⽰“正”,⽤1表⽰“负”,最⾼位的⼀位是被当做符号位,剩余的都是数值位正整数的原、反、补码都相同。

2023-11-28 00:52:59 619

原创 C语⾔内存函数--内存函数的模拟实现

函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。和memcpy的差别就是memmove函数处理的源内存块和⽬标内存块是可以重叠的。如果source和destination有任何的重叠,复制的结果都是未定义的。以上就是学习的内存函数的函数总结,内存函数还是稍微简单一些的,像。memset是⽤来设置内存的,将内存中的值以。//模拟实现memmove。

2023-11-26 16:42:23 1318 1

原创 字符函数和字符串函数学习总结(字符串库函数模拟)

跟strcpy,strcat和strcmp函数使用方法大概一样,但是因为他们长度不受限制,所有有时候可能会不安全,而strncpy,strncat和strncmp函数长度在使用的时候会收到限制。终止空字符目标中的第一个字符被源的第一个字符覆盖,并且包含空字符位于目标中两者串联而成的新字符串的末尾。之前总结了指针的学习内容,真的很绕也很难,一起加油学习吧,今天总结一下新学的字符函数和字符串函(老规矩,小图来自鹏哥)因为课程时间有限,所以这节课先总结到了这里,只有上完课会继续总结当天学习内容,大家一起加油吧!

2023-11-25 00:31:00 927

原创 qsort函数的模拟实现

void simulation(void* base, size_t sz, size_t se, int(*ec)(const void * x, const void * y)){//冒泡排序模拟函数。

2023-11-18 23:08:53 219 1

原创 指针学习总结(4)--计算器初步实现

虽然学的内容看起来不多但需要理解和仔细研究的地方有一些,通过多敲代码,练习,临摹来提高自己的编程和理解能力!把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被⽤来调⽤其所指向的函数时,被调⽤的函数就是回调函数。继续上一篇的学习总结,总结这节课的学习内容和理解,干货满满!>使用,但注意:函数排序整型等数据和排序结构体数据是不同的,有使用差别。结合,说明 parr1是数组,数组的内容是 int (*)()回调函数不是由该函数的实现⽅直接调⽤,⽽是在特。由另外的⼀⽅调⽤的,⽤于对该事件或条件进⾏响应。

2023-11-17 23:44:11 184

原创 指针学习总结(3)

p先和*结合,说明p是⼀个指针变量变量,然后指着指向的是⼀个⼤⼩为10个整型的数组。parr[i]是访问parr数组的元素,parr[i]找到的数组元素指向了整型⼀维数组,parr[i][j]就是整型⼀维数组中的元素。⼆维数组起始可以看做是每个元素是⼀维数组的数组,也就是⼆维数组的每个元素是⼀个⼀维数组。根据数组名是数组⾸元素的地址这个规则,⼆维数组的数组名表⽰的就是第⼀⾏的地址,是⼀。上述的代码模拟出⼆维数组的效果,实际上并⾮完全是⼆维数组,因为每⼀⾏并⾮是连续的。

2023-11-15 19:17:21 113

原创 深度学习指针----学习总结(2)冒泡排序

同理arr[i] 应该等价于 *(arr+i),数组元素的访问在编译器处理的时候,也是转换成⾸元素的地址+偏移量求出元素的地址,然后解引⽤来访问的。可以使⽤指针了,在main函数中将a和b的地址传递给Swap函数,Swap 函数⾥边通过地址间接的操作main函数中的a和b,并达到交换的效果.在main函数内部,创建了a和b,a的地址是0x00cffdd0,b的地址是0x00cffdc4,在调⽤。&数组名,这⾥的数组名表⽰整个数组,取出的是整个数组的地址(整个数组的地址和数组⾸元素 的地址是有区别的)

2023-11-11 20:07:24 24 1

原创 指针学习总结(1)

32位机器有32根地址总线, 每根线只有两态,表⽰0,1【电脉冲有⽆】,⼀根线,就能表⽰2种含义,2根线就能表⽰4种含义,依次类推。机器假设有32根地址总线,每根地址线出来的电信号转换成数字信号后是1或者0,那我们把32根地址线产⽣的2进制序列当做⼀个地址,那么⼀个地址就是32个bit位,机器,假设有64根地址线,⼀个地址就是64个⼆进制位组成的⼆进制序列,存储起来就需要 8个字节的空间,是C语⾔中定义的⼀个标识符常量,值是0,0也是地址,这个地址是⽆法使⽤的,读写该地址 会报错。

2023-11-11 00:39:52 124 1

原创 操作符详解学习总结--进制转换(不创建临时变量实现两个数的交换,整数存储在内存中的⼆进制中1的个数,⼆进制位置0或者置1,打印整数二进制的奇数位和偶数位和求两个数二进制中不同位的个数代码实现)

整数的2进制表⽰⽅法有三种,即原码、反码和补码 有符号整数的三种表⽰⽅法均有符号位和数值位两部分,2进制序列中,最⾼位的1位是被当做符号位,剩余的都是数值位。16进制的数字每⼀位都是0~9,A~F的数字组成(16进制不同的是他的表示是由0,1,2,3,4,5,6,7,8,9,A , B , C , D , E , F组成)同理可得,16进制制的数字每⼀位是0~9,a ~f 的,0~9,a ~f的数字,各⾃写成2进制,最多有4个2进制位就⾜够了。二进制是32位的,所以奇数和偶数的话都是16位。

2023-11-05 21:16:12 93

原创 函数递归学习总结-求n的阶乘,顺序打印⼀个整数的每⼀位,计算一个数的每位之和(递归实现)和第n个斐波那契数的实现!!

函数不返回,函数对应的栈帧空间就⼀直占⽤,所以如果函数调⽤中存在递归调⽤的话,每⼀次递归函数调⽤都会开辟属于⾃⼰的栈帧空间,直到函数递归不再继续,开始回归,才逐层释放栈帧空间。所以,我们需要像鹏哥所教授的那样,合理的去选择使用递归的方法,如果用递归写代码,非常容易,就选择递归,但如果使用递归会存在明显缺陷,那就选择使用迭代的方式去处理问题。之前我们学习了函数,现在我们来总结一下函数中的函数递归,而实现求n的阶乘,顺序打印⼀个整数的每⼀位,第n个斐波那契数的实现等这些代码就需要用到函数递归来实现。

2023-11-04 19:04:02 155

原创 扫雷游戏逐步实现(简单方法)

做到这里差不多的功能以及完成了,因为是9*9的棋盘,所以这个时候我们能需在排查雷的执行过程中循环次数为9(行)*9(列)=81-10(雷的个数)让他在在排完所有雷的时候结束循环。首先扫雷这个游戏肯定是跟电脑自带的扫雷功能大差不差(在棋盘上随机布置10个雷,不是雷的话显示周围有几个雷,选到雷游戏结束,剩下位置全部是雷,游戏成功。为了防⽌越界,我们在设计的时候,给数组扩⼤⼀圈,雷还是布置在中间的9*9的坐标上,周围⼀圈不去布置雷就⾏,这样就解决了越界的问题。//初始化棋盘都为“*”

2023-10-30 00:51:07 48 1

原创 学习总结-数组(上)

C语⾔的国际标准ANSI C规定了⼀ 些常⽤的函数的标准,这些标准就被被称为标准库,那不同的编译器⼚商根据ANSI提供的C语⾔标准就给出了⼀系列函数的实现。我们在调试的可以观察到,x和y确实得到了a和b的值,但是x和y的地址和a和b的地址是不⼀样的,所 以我们可以理解为。各种编译器的标准库中提供了⼀系列的库函数,这些库函数根据功能的划分,都在不同的头⽂件中进 ⾏了声明。库函数是在标准库中对应的头⽂件中声明的,所以库函数的使⽤,务必包含对应的头⽂件!上⾯代码中橙⾊的部分是函数的定义,绿⾊的部分是函数的调⽤。

2023-10-28 20:48:58 23 1

原创 c语言学习总结!!!!———数组

有 ⼀个⽐较迷惑的点,变⻓数组的意思是数组的⼤⼩是可以使⽤变量来指定的,在程序运⾏的时候,根 据变量的⼤⼩来指定数组的元素个数,⽽不是说数组的⼤⼩是可变的。地址之间相差4个字节,跨⾏位置处的两个元 素(如:arr[0][4]和arr[1][0])之间也是差4个字节,所以⼆维数组中的每个元素都是连续存放的。,这时候就是⼆维数组,⼆维数组作为数组元素的数组被称为三维数组,⼆维数组以上的数组统称为多维数组。存放在数组的值被称为数组的元素,数组在创建的时候可以指定数组的⼤⼩和数组的元素类型。

2023-10-26 01:14:09 34

原创 c语言学习总结(5)-分支和循环(2)------(数字游戏的产生控制)

通过 srand 函数的参数seed来设置rand函数⽣成随 机数的时候的种⼦,只要种⼦在变化,每次⽣成的随机数序列也就变化起来。printf("game over,数字是%d\n",r);printf("猜对了!//进入创建好的游戏界面。printf("猜大了\n");

2023-10-22 19:38:03 44 1

原创 C语言学习总结(4)-分支和循环(1)

比如有两个if语句但是只有一个else语句,在一些情况下会什么都输出不出来,因为一个if只能控制一条语句,并且else只会跟最近的if匹配,所以我们可以在写代码的时候适当的加上大括号,代码的逻辑就会更加清晰,可以养成良好的编程习惯,避免错误。短路就是c语言运算中国,如上个图的&&,,如果a

2023-10-15 18:20:32 35 1

原创 第三次学习总结(3)

上⾯所有占位符之中,除了 %c 以外,都会⾃动忽略起⾸的空⽩字符。如果希望改成左对⻬,在输出内容后⾯添加空 格,可以在占位符的 %解读⽤⼾输⼊时,会从上⼀次解读遗留的第⼀个字符开始,直到读完缓存,或者遇到第⼀个不符合条件的字符为⽌。表达式成⽴(为真),则语句执⾏,表达式不成⽴(为假),则语句不执⾏(在C语⾔中,0为假,⾮0表⽰真)++是⼀种⾃增的操作符,分为前置++和后置++,--是⼀种⾃减的操作符,分为前置--和后置--.在变量创建的时候给⼀个初始值叫初始化,在变量创建好后,再给⼀个值,这叫赋值。

2023-10-13 19:28:54 96

原创 C语言从零开始学习(第二课)

5.控制语句 :控制语句⽤于控制程序的执⾏流程,以实现程序的各种结构⽅式(C语⾔⽀持三种结构:顺序结构、选 择结构、循环结构)7.\f :换⻚符,光标移到下⼀⻚。3. 转向语句:break语句、goto语句、continue语句、return语句。10.\t :制表符,光标移到下⼀个⽔平制表位,通常是下⼀个8的倍数。4. \\ :⽤于表⽰⼀个反斜杠,防⽌它被解释为⼀个转义序列符。11.\v :垂直分隔符,光标移到下⼀个垂直制表位,通常是下⼀⾏。这就是我上课所学的知识总结了,希望小码农一起进步!

2023-10-11 18:06:17 52

原创 c语言从零开始学习记录(1)

特别提示:鹏哥的演示源程序(.c文件)通过编译器编译(.obj文件)和链接器处理(,exe文件)过程图。"abc"中隐藏这一个\0的字符,所以到c输出结束,而'a','b','c'中没有\0所以出现乱码。2.字符a~z的ASCII码值从97~122(大写和小写字符ASCII码相差32)C语言代码都是文本文件,本身无法执行,所以要通过编译器翻译和链接器的链接,生成。c语言是通过给计算机下达指令,让计算机工作的计算机语言。1.字符A~Z的ASCII码值从65~90。这就是我第一次学习的记录啦!

2023-10-10 18:45:47 99 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除