C语言
文章平均质量分 79
C语言学习
沉着的码农
一个沉着的码农
展开
-
【C语言】程序环境和预处理
相信define大家都不陌生//语法: # define name stuff# define MAX 1000 # define reg register //为 register这个关键字,创建一个简短的名字 # define do_forever for(;;) //用更形象的符号来替换一种实现 # define CASE break;case //在写case语句的时候自动把 break写上。原创 2023-02-11 03:54:56 · 91 阅读 · 1 评论 -
【C语言】模拟实现atoi
解析C字符串 将其内容解释为整数 该整数作为int类型返回。函数接收一个char*类型的指针 返回类型是int。可以看到,atoi函数将字符串内容转化为整型数据。我们在实现atoi函数时要考虑几个问题。接下来我们就实现atoi。原创 2023-02-09 22:44:24 · 78 阅读 · 0 评论 -
【C语言】文件操作
磁盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。原创 2023-02-03 02:52:47 · 380 阅读 · 8 评论 -
【C语言】动态内存管理
由资料可知这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针,返回类型为void当开辟失败时则返回NULLint i = 0;//我们需要的是整形指针 所以强制类型转换为int* if(ptr == NULL) //判断ptr是否为空指针 也就是判断是否成功开辟空间 {//打印错误信息 return 1;i < 10;i ++) //使用开辟的空间 {i < 10;i ++) {//释放掉开辟的空间 ptr == NULL;return 0;图解。原创 2023-01-30 02:05:54 · 69 阅读 · 3 评论 -
【C语言】通讯录的简易实现
Contact.h 保存项目所有的头文件和函数的声明Contact.h 项目所有函数的实现test.c 项目运行的逻辑。原创 2023-01-14 23:26:49 · 139 阅读 · 1 评论 -
【C语言】结构体的内存对齐
不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访。1.为什么两个结构体中元素大小之和都是6 但是程序运行起来的结果却不是6呢?数据结构(尤其是栈)应该尽可能地在自然边界上对齐。2.为什么两个结构体的成员相同大小却不一样呢?结构体的内存对齐是拿空间来换取时间的做法。定类型的数据,否则抛出硬件异常。我们发现有几件奇怪的事情。这段代码的运行结果为。gcc没有默认对齐数。原创 2023-01-13 01:03:41 · 71 阅读 · 1 评论 -
【C语言】字符串函数和内存函数的模拟实现
和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。strcat是字符串追加函数,往目的地字符串后面追加一个字符串。如果源空间和目标空间出现重叠,就得使用memmove函数处理。strstr是字符串查找函数 在一个字符串中查找另一个字符串。第一个字符串大于第二个字符串,则返回大于0的数字。第一个字符串小于第二个字符串,则返回小于0的数字。第一个字符串等于第二个字符串,则返回0。比较的是每个字符的ASCII值的大小。strlen是求字符串长度函数。strcpy是字符串拷贝函数。原创 2023-01-12 23:27:16 · 61 阅读 · 1 评论 -
【C语言】指针进阶(qsort的用法和模拟实现)
如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。且qsort函数不止可以对整型数组排序,根据我们写的比较函数,可以给结构体元素等等一系列数组排序。这时我们就可以使用函数指针数组的方式,将每个运算逻辑的函数放在一个函数指针数组中。库函数中的qsort函数内部是使用快速排序的算法来实现的。学习了数组指针和指针数组,来看下面的代码。原创 2023-01-10 23:36:26 · 194 阅读 · 0 评论 -
【C语言】模拟实现库函数strcpy
最后就是处理函数的返回值,库函数中函数返回值是目的地的地址,处理方法很简单,在函数内部创建一个局部变量来储存dest的起始地址作为返回值就可以了。查阅资料可知strcpy函数的功能是将源字符串的内容复制到目的地字符串中,结束标志是\0,且将\0也复制到目的地字符串。我们要知道为什么要在源头字符串前加const而不是目的地字符串,就要先了解strcpy函数的功能,它是。我们要想是函数更加健壮,还可以使用assert来断言指针的有效性,主要是用来。根据上面的分析,我们可以简单的写出以下的代码。原创 2022-12-22 20:42:47 · 242 阅读 · 2 评论 -
【C语言】模拟实现库函数strlen
查阅资料可知strlen函数的返回值为字符串长度,且结束标志是\0。原创 2022-12-22 00:03:39 · 112 阅读 · 2 评论 -
【C语言】浮点数在内存中的存储
在上面这段代码中,我们分别用整型和浮点型的方式打印一个整型和一个浮点型,那么结果是什么呢?可以看到我们用整形的方式打印整型和用浮点型的方式打印浮点型都没有出现问题而用浮点数的方式打印整型和用整形的方式打印浮点型都出现了问题根据国际标准IEEE(电气和电子工程协会) 754,任意一个二进制浮点数V可以表示成下面的形式:(-1)^S * M * 2^E(-1)^S表示符号位,当S=0,V为正数;当S=1,V为负数。M表示有效数字,大于等于1,小于2。2^E表示指数位。举例来说:十进制的5.0,原创 2022-12-07 23:02:54 · 375 阅读 · 1 评论 -
【C语言】整型在内存中的存储
我们之前讲过一个变量的创建是要在内存中开辟空间的。空间的大小是根据不同的类型而决定的。那接下来我们谈谈数据在所开辟内存中到底是如何存储的?比如:我们知道为 a 分配四个字节的空间。那如何存储?原码直接将数值按照正负数的形式翻译成二进制就可以得到原码。反码将原码的符号位不变,其他位依次按位取反就可以得到反码。补码反码+1就得到补码。对于整形来说:数据存放内存中其实存放的是补码。为什么呢?我们在调试窗口可以看得到数据在内存中的存储我们可以看到对于a和b分别存储的是补码。但是我们发现顺序有点不对劲原创 2022-12-07 00:53:09 · 223 阅读 · 2 评论 -
【C语言】移位操作符和位操作符
位操作符和移位操作符都是针对于二进制进行操作的。原创 2022-11-27 13:42:35 · 484 阅读 · 4 评论 -
【C语言】三子棋小游戏的实现
到此我们的三子棋小游戏的基本逻辑已经实现游戏项目具体在链接:link希望我的代码能对你产生帮助IDE VS2022。原创 2022-11-26 01:43:44 · 1480 阅读 · 6 评论 -
【C语言】冒泡排序详解
以此类推 我们就将该序列中最大的元素放在最后 这是一轮冒泡排序。个元素排序号后 最后一个元素就已经是有序的了 所以只需要进行。最后一趟排序 两两元素之间判断需要 1次。第一个元素9和8比较 9>8 所以交换。在循环内部 我们要实现元素的判断和交换。第一趟排序 两两元素之间判断需要 9次。第二趟排序 两两元素之间判断需要 8次。第三趟排序 两两元素之间判断需要 7次。所以我们就可以写出冒泡排序的基本过程。我们发现每过一趟 判断次数就少一次。理论上要将所有元素都排序需要。判断的思路就和开头的思想一样。原创 2022-11-25 19:17:58 · 444 阅读 · 1 评论 -
【C语言】二分查找的实现
如果我要找的元素在这个序列中并,没有出现 那么就会出现left>right的情况(可以按照上述的分析方法分析)所以我们如果想要准确查找出被查找的元素,就应该还需要继续进行这样的查找,所以我们将上述过程放在一个循环中。在我们日常生活中,经常会遇到查找一样东西的情景,比如在一个班的学生成绩中找到xx分对应的人。考虑最坏的情况,我们所要找的元素正好处在数组的最后一个,那就意味着我们的。首先二分查找的前提是被查找的数组必须是。被查找的元素,那么k就只能在中间元素的。被查找的元素,那么k就只能在中间元素的。原创 2022-11-23 23:28:15 · 3393 阅读 · 2 评论 -
【C语言】C语言中EOF的具体用法
C语言中EOF的具体用法原创 2022-11-21 18:29:58 · 17578 阅读 · 11 评论 -
【C语言】C语言中关键字static的用法
C语言中关键字static的用法原创 2022-11-20 20:01:14 · 647 阅读 · 3 评论