超详细超全的C语言
文章平均质量分 88
0基础开始,基础知识,到熟练运用C语言,涉及范围广,具有超多例子与代码讲解,博主在线答疑
遇事问春风乄
长风破浪会有时,直挂云帆济沧海
展开
-
【C语言进阶】程序环境和预处理超详细讲解
目录程序的翻译环境和执行环境详解编译+链接 翻译环境编译本身也分为几个阶段运行环境预处理(预编译)详解 预定义符号#define#define 定义标识符#define 定义宏 #define 替换规则 #和## ## 的作用带副作用的宏参数宏和函数对比 命名约定 #undef命令行定义 条件编译文件包含头文件被包含的方式本地文件包含库文件包含嵌套文件包含总结 注意 :我们这里使用Linux系统上的gcc编译器编译本身也分为几个阶段,测试代码如下 预处理阶段:编译阶段:汇编阶段:链接阶段:原创 2023-07-17 21:03:14 · 1609 阅读 · 41 评论 -
【C语言进阶】 C语言文件操作
目录为什么使用文件什么是文件程序文件数据文件 文件名文件的打开和关闭文件指针文件的打开和关闭 文件的顺序读写顺序读写函数介绍字符输出函数fputc字符输入函数fgets 文本行输出函数 fputs文本行输入函数fgets 格式化输出函数fprintf格式化输入函数fscanf二进制输出函数fwrite二进制输入函数fread 函数对比sprintfsscanf 文件的随机读写fseekftell rewind 文本文件和二进制文件文件读取结束的判定被错误使用的feof例一 例二 文件缓冲区总结 为了方原创 2023-07-17 06:00:00 · 1608 阅读 · 31 评论 -
【C语言进阶】 C语言实现简易通讯录
enum OPTION//枚举EXIT,//0ADD,DEL,SEARCH,MODIFY,SHOW。原创 2023-07-14 11:57:03 · 1373 阅读 · 23 评论 -
【C语言进阶】 动态内存管理
目录动态内存分配存在的原因动态内存函数的介绍malloc和freecallocrealloc常见的动态内存错误 对NULL指针的解引用操作对动态开辟空间的越界访问对非动态开辟内存使用free释放 使用free释放一块动态开辟内存的一部分 对同一块动态内存多次释放 动态开辟内存忘记释放(内存泄漏)几个经典的笔试题题一题目二题目三题目四C/C++程序的内存开辟柔性数组柔性数组的特点 柔性数组的使用柔性数组的优势总结 我们先看两种内存开辟方式但是上述的开辟空间的方式有两个特点: 1. 空间开辟大小是原创 2023-07-13 21:44:04 · 1460 阅读 · 28 评论 -
【C语言初阶】 操作符详解(1)
逻辑反操作int main()if (!flag)//flag 为假 打印heheif (flag)return 0;简单的应用//{// //scanf 读取失败返回的是EOF= EOF)// {// }//}+ 与 -这里博主就不介绍了//& * 应用于指针//{// //pa是指针变量//&-取地址操作符-取出a的地址//解引用操作符(间接访问操作符)-单目操作符-通用pa中存放的地址,找到指向的空间(内容)//}~ 操作符讲解和使用如下。原创 2023-05-12 18:54:00 · 1626 阅读 · 9 评论 -
【C语言初阶】 三子棋游戏的简单实现(C语言后附完整代码)
写一个代码,我们从它的主函数开始写起,那么我们这个主函数该怎么写呢;成功实现,但是我们发现,前面堆积太多了,下一次游戏进行十分不美观,这时候博主前面所讲得一个就起作用了 ,有了这一段代码后,只需要你再按一下回车,就可以清除前面所打印的。首先我们得对数组初始化,其次呢我们得有个棋盘,然后呢就是下棋过程,分为玩家下棋,和电脑下棋,而每一轮下完棋后,又需要进行判断输赢情况。电脑输入这里我们将引用前面猜数字游戏所讲的一个知识点,随机数的产生,接下来我们来看看代码的实现。我们先来看一下我们所需要得棋盘长什么样子?原创 2023-05-07 17:11:33 · 1496 阅读 · 9 评论 -
【C语言初阶】 青蛙跳台阶问题的简单实现与理解(递归实现)
4阶台阶: (1)跳1跳1跳1跳1 (2)跳1跳1跳2 (3)跳1跳2跳1 (4)跳2跳1跳1 (5)跳2跳2。1、关于跳台阶问题,无论怎样上台阶,最后一步都会剩下两种情况:1.还有一步 2.还有两步;青蛙走n阶台阶,它可以选择跳一阶或者跳两阶,那么他一共有多少种跳法?3阶台阶:(1)跳1跳1跳1 (2)跳1跳2 (3)跳2跳1。//依次进行,向后递,当台阶数小于2时,归;2、而当台阶数小于二时,跳台阶的方法就等于台阶数目;//我们先讨论最后一步,就非常简单,2阶台阶:(1)跳1 跳1 (2)跳2。原创 2023-05-04 11:12:16 · 1496 阅读 · 2 评论 -
【C语言初阶】 C语言初识函数二
在这儿给大家举一个列子,假如,博主很厉害,在空余时间写了一个,很牛的代码(由于博主现在不牛,后面代码用加法代码代替),想要卖出去挣钱。下面就是上面函数的声明,告诉了编译器有一个add()的函数,参数类型为(int,int ),这里声明时只用要交代残数类型是什么,不用变量,下面展示的代码是两种声明方式,都可用,每个程序员都完成自己相应模块后,这时候当需要一个完整的计算机的时候,便可以轻松完成,比如q程序员想做,这时候他只需要创建一个test.c,并在该工程包含该这些函数便可以实现。首先这是我们所写的代码。原创 2023-05-06 12:42:32 · 1486 阅读 · 2 评论 -
【C语言初阶】 递归函数实例讲解
如果需要我们求第n个斐波那契额数,我们就只需要知道n-1和n-2,知道n-1只需知道n-2和n-3,知道n-2只需知道n-3和n-4...... ......;上面蓝色的线就是递推的过程,把1234一层层剥离,红色的线就是回归的过程,一步一步进行打印。红色线为递推过程,蓝色线为回归过程。两段代码对比后发现,递归代码量明显减少,下来我们来讲一下上面代码是如何实现的,博主借用了一个大牛的图给大家讲解一下。我们发现要求一个数就得知道它前两个数,如果这个数太大,就像一棵倒着得数,程2得n次方增长,所以不考虑溢出,原创 2023-05-07 15:03:45 · 1749 阅读 · 2 评论 -
【C语言初阶】 想要了解数组吗?进来看看
访问越界在运行时,它的表现是不定的,有时似乎什么事也没有,程序一直运行(当然,某些错误结果已造成);数组可以做为函数形参传入进行处理,此时的数组变量退化为数组首元素的地址。数组的下标是从0开始的,最大的访问值是数组的长度-1;千万要注意,定义数组时用到的“数组名[常量表达式]”和引用数组元素时用到的“数组名[下标]”是有区别的,标准中引入了:变长数组的概念,使得数组在创建的时候可以使用变量,但是这样的数组不能初始化。仔细观察输出的结果,可知随着数组下标的增长,元素的地址,也在有规律的递增。原创 2023-05-09 09:34:15 · 1125 阅读 · 3 评论 -
【C语言初阶】 快来看看扫雷的简单实现(C语言,后附完整代码)
该位置不是雷时,我们就要判断坐标周围有多少雷了,这时候我们创建11*11的作用就体现出来了,因为棋盘为9*9,要判断坐标周围雷的数量,一般是判断周围八个坐标,但是呢,边缘区域没有8个,就比较特殊,情况较为麻烦,而我们创建了11*11,可以有效的防止数组越界额,我们只在中间9*9的棋盘内放置了雷,边缘区域没有雷,所以不影响雷数量的判断。这里初始化时,因为我们mine[ROWS][COLS]里存放的是雷,而我们这里用‘0’和‘1’来表示,‘1’表示雷,而这里初始化时因为没有雷,我们全部初始化为‘0’;原创 2023-05-09 18:56:14 · 1591 阅读 · 8 评论 -
一定要掌握的实用调试技巧(vs2019)
Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用可在编译器此处选择配置在环境中选择 debug 选项,才能使代码正常调试。原创 2023-05-23 18:13:04 · 2726 阅读 · 11 评论 -
【C语言】 操作符详解(2)
紧接上文,我们将继续进行操作符的讲解。原创 2023-05-15 09:42:31 · 1677 阅读 · 16 评论 -
【C语言初阶】 初阶指针C语言
在写C语言程序的时候,创建的变量、数组都需要在内存上开辟空间。每个内存都有唯一的编号,这个编号也称为地址编号,也就是地址,即指针;如下图地址编号 = 地址 = 指针这里我们需要明确两个要点:1、指针是内存中最小单元的编号,也就是地址,这上面我们已经解释过了2、平时口语说的指针,通常是指针变量,是用来存放内存地址的变量,这里做何解释呢?比如上述代码,p就是我们口语所说的指针,但其实它是一个指针变量,里面存放的是a的地址。原创 2023-05-16 23:05:55 · 1563 阅读 · 7 评论 -
【C语言初阶】 倒置字符串、猜名次、猜凶手、杨辉三角
因为由于循环的原因会导致一些不期望出现的结果出现,因为我并没有查重,所以会出现两个人抢名次的情况,也就是两个人或者更多的人名次相同的情况,例如两个第二,三个第三这样的,所以即使满足了条件,也要查看一下五个人的名次是否重复,这个交给一个函数来执行。这里博主采用的是将整个字符串逆序,再将单个单词逆序(采用的是指针,若有宝子不懂得,可以看看博主以前得文章)因为需要逆序整个字符串和每个单词,所以博主在这儿将逆序这个功能单独拿出来,实现函数如下。这里呢,博主给出两种思路,一种是先将整个字符串逆序,再将单个单词逆序;原创 2023-05-27 21:05:53 · 2787 阅读 · 8 评论 -
【C语言进阶】 数据在内存中的存储(1)——整形
我们先来简单了解一下我们前面所学的基本的内置类型数据类型数据名占内存字节数表示范围char字符数据类型1-128~127short短整型2int整形4long长整型4或者8long long更长的整形8float单精度浮点数4double双精度浮点数8这么多类型存在的意义在于使用者可以选择自己所需要合适的类型在介绍大小端是我们先来看几组现象,有助于我们理解,博主这里使用的编译器为vs2019。原创 2023-05-28 13:25:36 · 2411 阅读 · 12 评论 -
【C语言进阶】 函数栈帧的创建与销毁
我们知道,函数的调用都需要在栈区上开辟空间,那么我们先来解答几个问题:1.什么是栈?【答】栈是一种数据结构,它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据。栈区内存空间的使用是从高地址向低地址处使用的。2.什么是压栈?什么是出栈?【答】一个形象的比喻就是机枪弹夹。压栈的过程就是压入一个元素,相当于向机枪弹夹压入子弹;出栈的过程就是弹出一个元素,相当于子弹弹出来的过程。这正好对应了栈的结构特点——先进入的数据被压在栈底,后进入的数据在栈顶。原创 2023-05-31 15:35:14 · 2204 阅读 · 12 评论 -
【C语言进阶】 数据在内存中的存储(2)——浮点数
首先,我们需要理解什么是浮点数?之前我们学习了定点数,其中「定点」指的是约定小数点位置固定不变。那浮点数的「浮点」就是指,其小数点的位置是可以是的。这怎么理解呢?看到了吗?用这种科学计数法的方式表示小数时,小数点的位置就变得「漂浮不定」了,这就是浮点数名字的由来。使用同样的规则,对于二进制数,我们也可以用科学计数法表示,也就是说把基数 10 换成 2 即可。原创 2023-06-01 10:14:54 · 1935 阅读 · 17 评论 -
【C语言进阶】 菱形图案打印、水仙花数、买汽水
题目要求其实呢这道题很多人想到直接用printf()进行输出,我想说的是,这样写不但麻烦、代码难看,而且实用性极低,所以当我们遇到这种类似循环输出题目是,不建议printf()输出;接下来我就为大家简单介绍一下此题的做法,对于这类型的题其实我们只需要找到规律,就非常简单,仔细观察图形,可以发现,此图形中是由空格和*按照不同个数的输出组成的。原创 2023-06-03 12:53:40 · 2212 阅读 · 19 评论 -
【C语言进阶】 指针的进阶(一)
数组指针是指针?还是数组?答案是:指针。我们已经熟悉:整形指针:int * pint;能够指向整形数据的指针。浮点型指针:float * pf;能够指向浮点型数据的指针。那数组指针应该是:能够指向数组的指针。让我们来区分一下数组指针。原创 2023-07-07 16:19:12 · 1345 阅读 · 12 评论 -
【C语言进阶】 指针进阶(二)
函数指针数组数组是一个存放相同类型数据的存储空间,前面博主已经讲解了指针数组, 比如把函数的地址存到一个数组中,那这个数组就叫函数指针数组,下面时函数指针的数组的定义parr1parr1先和[]结合,说明parr1是数组,数组的·内容是int (*)()类型的函数指针。接下来我将通过代码的形式来介绍一下函数指针的数组,这里博主编译一个简单的计算机进行讲解,代码如下对于这段代码,我们发现这段代码有很多相同且类似的代码这就造成了冗余,那么有没有什么办法进行解决呢?原创 2023-07-07 23:24:57 · 828 阅读 · 8 评论 -
【C语言进阶】 指针和数组笔试题解析
本篇博文,将从指针和数组来为大家分析一些笔试题,设计内容多,全是干货,接下来让我们一起来看一下吧。原创 2023-07-08 20:07:51 · 1814 阅读 · 19 评论 -
【C语言进阶】 字符函数和字符串函数
本篇博文将讲解重点介绍处理字符和字符串的库函数的使用和注意事项。C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在常量字符串中或者字符数组中。字符串常量适用于那些对它不做修改的字符串函数求字符串长度strlen用于求取一个字符串的长度,使用格式如下。原创 2023-07-10 08:00:00 · 1696 阅读 · 19 评论 -
【C语言进阶】 内存函数相关讲解与模拟实现
由 source指向地址为起始地址的连续n个字节的数据复制到以destination指向地址为起始地址的空间内。格式如下函数返回一个指向desinationt的指针。搭配头文件#include使用source和destination所指内存区域不能重叠与strcpy相比,memcpy并不是遇到'\0'就结束,而是一定会拷贝完n个字节。strcpy就只能拷贝字符串了,它遇到'\0'就结束拷贝。用来做内存拷贝,你可以拿它拷贝任何数据类型的对象,可以指定拷贝的数据长度。原创 2023-07-11 19:25:06 · 1803 阅读 · 11 评论 -
【C语言进阶】 杨氏矩阵,字符串左旋,字符串旋转结果题目解析
有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。我们仔细分析,不难发现,对于杨氏矩阵老说,右上角和左下角的元素是有特点的。右上角的元素是一行中最大的,一列中最小的。左下角的元素是一行中最小的,是一列中最大的。所以我们可以从右上角或者左下角开始查找。比如:从右上角开始查找的时候,右上角的元素比我们要查找元素小,我们就可以去掉右上角元素所在的这一行;右上角的元素比我们要查找的元素大,我们就可以去掉右上角元素所在的这一列。原创 2023-07-11 20:47:11 · 1672 阅读 · 6 评论 -
【C语言初阶】 对C语言函数的初步认识
函数是指一段在一起的、可以做某一件事儿的程序。也叫做子程序、(OOP中)方法。一个较大的程序一般应分为若干个程序块,每一个模块用来实现一个特定的功能。所有的高级语言中都有子程序这个概念,用子程序实现模块的功能。在C语言中,子程序的作用是由一个主函数和若干个函数构成。由主函数调用其他函数,其他函数也可以互相调用。同一个函数可以被一个或多个函数调用任意多次。在程序设计中,常将一些常用的功能模块编写成函数,放在函数库中供公共选用。要善于利用函数,以减少重复编写程序段的工作量。原创 2023-04-23 19:32:19 · 1485 阅读 · 3 评论 -
【C语言初阶】 猜数字游戏的简单实现
1.有一个游戏菜单,可供使用者选择是否要玩游戏;2.可供使用者重复游玩;3.程序每次产生的数字随机;4.所生成的随机数在1-100;5.在每一个使用者输入数字后可以做出判断并给出相应的提示;原创 2023-04-21 17:41:39 · 1670 阅读 · 3 评论 -
【C语言初阶】初入江湖遇到的问题
一、大小写的转换题目要求:实现字母大小写,多组输入输出。所遇到的问题:对于getchar()内的判断条件无从下手;对于ascll表掌握不全;对于大小字母转换,ascll值相差32,具体使用请参考详细的ascll表。二、缩进二进制题目要求:我们处理的整数通常用十进制表示,在计算机内存中是以二进制补码形式存储,但通常二进制表示的整数比较长,为了便于在程序设计过程中理解和处理数据,通常采用八进制和十六,缩短了,但保持了的表达特点。请输出十进制整数1234对应的八进制和十六进制。原创 2023-04-07 17:29:34 · 1424 阅读 · 3 评论 -
【C语言进阶】 详解自定义类型:结构体,枚举,联合
位段,C语言允许在一个结构体中以位为单位来指定其成员所占内存长度,这种以位为单位的成员称为“位段”或称“位域”( bit field)。利用位段能够用较少的位数存储数据。位段和结构体其实是非常相似的,但是有两个不同点:1. 位段的成员必须是或signed int。2. 位段的成员名后边有一个冒号和一个数字。举个例子struct Aint _a : 2;int _b : 5;首先我们要明白位段中的这个“位”字其实指的是二进制位。我们知道一个二进制位就是1个比特位。所以,A中。原创 2023-07-12 16:02:38 · 1782 阅读 · 21 评论 -
【C语言初阶】 初识结构体
下面代码为结构体全局变量的定义//{// //成员变量,是用来描述结构体对象的相关属性的// int age;//男 女 保密//s2,s3,s4 就是结构体变量 - 全局变量我们还可以大结构体定义为局部变量int main()//{//局部变量//}上述代码就是结构体局部变量这里呢我们引入一个 typedef的关键字,它的作用是对结构体重命名//{// //成员变量,是用来描述结构体对象的相关属性的// int age;//男 女 保密//} Stu;原创 2023-05-19 17:04:51 · 1565 阅读 · 11 评论