
C语言
文章平均质量分 93
小猪咪piggy
这个作者很懒,什么都没留下…
展开
-
【C语言】(23)预处理指令详解
预定义符号,会在预处理阶段,被直接替换为它的内容。__FILE__ //进⾏编译的源⽂件__LINE__ //⽂件当前的⾏号__DATE__ //⽂件被编译的⽇期__TIME__ //⽂件被编译的时间__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义在 VS 环境中演示,预定义符号__STDC__不可使用:用 gcc 编译器演示,gcc 遵循标准C:#define 定义常量,会在预处理阶段,将代码中的名字直接替换为内容。// name: 名字// stuff: 内容。原创 2024-10-07 02:47:20 · 1892 阅读 · 1 评论 -
【C语言】(21)文件操作
文件就是存放在外存上的文件。按功能分类,又分为两类:程序文件和数据文件。原创 2024-10-05 00:43:37 · 897 阅读 · 0 评论 -
【C语言】(20)动态内存管理
内存映射段目前不需要知道是什么东西;代码段是存放程序编译之后,代码和常量的二进制指令。以左边的代码为例子:紫色框出的是全局变量、静态变量,存放在数据段;绿色框出的是局部变量、有关函数调用的信息,存放在栈区;黄色框出来的是动态分配的内存空间,在堆区;红色框出来的是初始化局部变量的常量,存放在代码段。栈区(stack):① 函数的局部变量、形参、返回值、返回到的地址等函数信息,都在栈区创建。函数执行结束,存储这些信息的空间也会被自动释放。② 栈区的内存分配在处理器的指令集中运算,效率高,但可分配的空间有限。原创 2024-09-23 10:28:01 · 915 阅读 · 0 评论 -
【C语言】(19)自定义类型——结构体
成员类型必须是,C99 标准中也可以是其它类型。成员名后是冒号 + 数字。int _b : 5;位段 A 大小是?如果按照结构体的内存对齐的方法计算,4 * 4 = 16 个字节。看看运行结果:显然不是按结构体的方式计算内存大小,实际上位段的位表示二进制位冒号后面的数字是该成员的大小,比如 _a 占 2 bit。但是位段 A 的所有成员的大小加起来是 2+5+10+30 = 47,用 6 个字节(68 bit)就够了,为什么是8 字节呢?请看下节。原创 2024-09-20 13:17:01 · 820 阅读 · 0 评论 -
【C语言】(18)自定义类型——联合和枚举
联合体适用于不需要给每个成员开辟空间,且成员不需要同时使用的场景,可以节省空间。以上代码,联合体大小是成员 i (所需空间最大的成员)的大小;联合体、每个成员的地址都是 004FFA90(成员共用一个空间)。定义商品变量时,图书不需要设计、颜色、尺寸信息;杯子不需要书名、作者、页数等信息。使用结构体类型,会浪费很多空间。但 C++ 的类型检查更严谨,不能拿整数给枚举变量赋值。看应用场景选择使用结构体还是联合体,应用见(5)。包含的内容是枚举类型可能的取值,称为。例2:判断当前机器是大端还是小端。原创 2024-09-20 13:15:04 · 878 阅读 · 0 评论 -
【C语言】(17)数据在内存中的存储
内存中以一个字节为单元,超过一个字节的数据(short、int、long)在内存中存储,必然就有存储顺序的问题。另外,对于大于8位的处理器,例如16位、32位处理器,由于寄存器宽度大于一个字节,也会存在多个字节的存储顺序的问题。在内存中数据是以二进制存储的,这里为了方便书写和观察,用十六进制表示。原创 2024-09-11 17:56:25 · 1012 阅读 · 0 评论 -
【C语言】(16)内存函数
内存函数的使用以及部分模拟实现原创 2024-08-12 09:43:39 · 825 阅读 · 0 评论 -
【C语言】(15)字符函数和字符串函数
对常用的字符和字符串操作函数进行了讲解原创 2024-08-10 21:21:07 · 1248 阅读 · 0 评论 -
【C语言】(14)一篇文章学会C语言最难指针
CPU处理数据时,会向内存读取数据和写入数据。因为内存比较昂贵,所以电脑的内存大小一般是8GB/16GB/32GB等;而外存比较便宜,一般是500GB/1T等。内存这么小,那么是如何高效管理的呢?内存被分为了一个个内存单元(相当于宿舍的房间),每个单元大小为1字节,及8 bit(相当于床位) ,每一个 bit 位上会存放1或者0(相当于住宿的人)。每一个单元的编号,就叫做地址(相当于房间号),在C语言中地址有一个新名字,叫做指针。因此,内存单元的编号 == 地址 == 指针。存放整数的数组叫做整数数组;原创 2024-08-08 15:58:08 · 1042 阅读 · 0 评论 -
【C语言】【数据结构】(13)冒泡排序及优化
冒泡排序是一种简单的排序算法。一次从前往后地走访待排序的元素序列被称为一趟,每一趟都会把相邻的两个元素的错误顺序交换,将当前趟次中最大或者最小的元素像“冒泡泡”一样冒到最后面,反复地走访元素序列,直到所有元素都排好序。原创 2024-08-02 22:03:43 · 510 阅读 · 0 评论 -
【C语言】(12)操作符详解
/ 结构体类型变量的定义:// 班级结构体类型声明// 年级// 学院// 专业// 班级// 定义班级结构体类型的变量p1(第一种方式的定义)// 学生结构体类型的声明// 姓名int age;// 年龄// 性别// 学号// 班级// 声明结构体类型的同时,定义变量(第二种方式的定义)// 结构体类型变量的初始化:// 默认顺序初始化// 指定顺序初始化int data;// 结构体嵌套初始化// 结构体嵌套初始化。原创 2024-07-31 08:07:36 · 1764 阅读 · 0 评论 -
【C语言】【计算机组成原理】(11)进制转换和原码、反码、补码
数据在计算机中都是以补码形式存放的。实现了将加法和减法统一进行处理。实现了将符号位和数值位统一进行处理。原码和补码的相互转换,原理相同,不需要增加额外的硬件电路。原创 2024-07-29 15:50:14 · 4071 阅读 · 7 评论 -
【C语言】(10)函数的递归
递归就是函数自己调用自己。下面举一个简单的递归例子(并不能解决问题,用法也不正确,只是让大家感受一下递归是什么样的):在打印了很多次后终止了运行,但预期是一直死循环打印下去,为什么会这样?调试看看:用F11进行调试,不进入第6行的main();,最后弹出了一个错误,如上图,Stack overflow(栈溢出),出现这个问题的原因在第四节讲。原创 2024-07-27 22:45:57 · 1582 阅读 · 1 评论 -
【C语言】(9)VS调试常用技巧
debug形象的翻译就是消除bug,中文称调试。首先我们承认出现了问题后,就需要通过调试技巧,找到问题,然后修复代码,重新测试。原创 2024-07-27 01:11:53 · 949 阅读 · 0 评论 -
【C语言】(8)简易版扫雷游戏(数组、函数的练习)
打印时,等于9或10的位置打印' * ',小于等于8的位置打印周围雷个数。但是这样在打印时会多一些判断,写代码时也容易混淆雷位置信息和雷个数信息,读代码的人理解起来也没有分成两个数组容易。因为有字符' * ',所以存周围雷个数的数组的元素用char类型;虽然存雷位置的数组都是数字0和1,但是统一起见,元素的类型都定义为char,这样写代码的时候不容易搞错。② 打印在控制台的扫雷画面(未排雷的位置显示 ' * ' ,已排雷且非雷的位置显示周围雷的个数)。排雷时,如果找到非雷,则显示周围雷的个数。原创 2024-07-25 19:44:29 · 1504 阅读 · 0 评论 -
【C语言】【数据结构】(6)二分查找(数组的练习)
记录数组的三个位置:low、high、mid分别记录当前查找的数组子集的起始位置、结束位置、中间位置。当前数组子集的mid = (low + high) / 2,注意:C语言中整型数相除,结果会舍去小数部分。每次将要查找的数key与mid位置的数比较:如果key大于mid位置的数,说明key是在数组右半子集的范围里,那么更新子集的范围,low更新为mid+1;如果key小于mid位置的数,说明key是在数组左半子集的范围里,那么更新子集的范围,high更新为mid - 1。原创 2024-07-23 20:49:09 · 1217 阅读 · 0 评论 -
【C语言】(7)函数
函数是执行某个特定任务的一小段代码,又叫做子程序。一个大的计算机任务可以分成很多个函数。一个拥有特点功能的函数能够重复利用,减少代码量和代码冗杂,提高软件开发的效率。函数分为库函数和自定义函数。程序员应该聚焦在自定义函数上,发挥创造性编写有特殊功能、库函数中没有的函数。函数应该先声明再使用。如果函数的定义在函数的调用之后,则必须在函数调用之前声明函数:如果没有函数声明,虽然也能运行正确,但是编译器会给出警告,需要改正:当然,如果把函数的定义写在函数调用之前,函数的定义本身是一种特殊的函数声明。原创 2024-07-24 22:42:37 · 1676 阅读 · 0 评论 -
【C语言】(5)数组
数组就是一个同一类型数据的集合。数组里面的数据叫元素,元素可以只有1个也可以有很多个,但是不能没有。原创 2024-07-23 18:44:43 · 1444 阅读 · 0 评论 -
【C语言】(3)分支和循环语句
c语言是一种,它的结构主要分为。日常的所有事情都可以拆分成这三种结构。顺序结构就不用过多介绍了,就是按照先后顺序一条一条地执行命令。接下来主要详细介绍选择结构和循环结构。原创 2024-07-22 19:07:15 · 1289 阅读 · 0 评论 -
【C语言】(4)随机数的生成
这样会导致每一轮循环生成的随机数都是一样的,因为程序执行得很快,很多轮循环都会发生在同1秒内,导致时间戳没变,设置的种子值也就不变了。当time的参数非NULL时,time函数不仅会返回时间戳,还会把返回的时间戳存储在timer指向的内存空间里;我们不能得到随机的种子值,但是能得到变化的种子值,比如根据时间而变化。,时间戳就是当前的时间与计算机的初始时间1970年1月1日0时0分0秒之间的差值,以秒为单位。重复运行上面的程序,会发现每次的执行结果都一样,这样就失去了随机数的意义。前面的循环生成的随机数。原创 2024-07-22 22:27:01 · 18304 阅读 · 2 评论 -
【C语言】(2)数据类型、变量、操作符、printf、scanf详解
数据类型就是一类相似数据的共同特征。编程是为了解决生活中的问题,比如网络商城中的商品有名称、编号、价格等属性,那么代码就需要具备描述这些不同属性的能力:字符用字符型描述、整数用整型描述、小数用浮点型描述......原创 2024-07-20 01:03:51 · 1363 阅读 · 0 评论 -
【C语言】(1)常见的概念
人跟人通过自然语言交流,那么人跟计算机的交流就需要通过计算机语言实现。计算机语言有很多,比如:C、C++、Java、Python等等。总而言之,C语言就是一种能够让计算机听指挥工作的计算机语言。任何一种语言都有它的词法、语法、语义等规则(详解请看《编译原理》),C语言也不例外。下面将简单介绍一些C语言的基本规则。原创 2024-07-16 20:01:39 · 1022 阅读 · 0 评论