
C语言学习
文章平均质量分 88
对C语言知识进行较为系统全面且又具有一定深度的学习
intellectual_seeker
这个作者很懒,什么都没留下…
展开
-
C语言:函数栈帧的创建与销毁
不同的开发环境对于函数栈帧的创建与销毁,实现细节上是不同的,但思路上大体相同,我们接下来对函数栈帧的刨析都是基于vs2013这一个集成开发环境的结果。观察所用示例代码,如下:1int z = 0;z = x + y;return z;int b = 20;int c = 0;return 0;接下来我们会配合编译生成的汇编代码,监视窗口,内存窗口等工具,在调试模式下,来具体观察函数栈帧创建于销毁的每一步骤。原创 2024-11-11 14:41:17 · 1075 阅读 · 0 评论 -
分支与循环语句练习
答:0次,k = 0为赋值表达式,其结果为0。0为在计算机识别时代表假,判断结果为假,程序不执行,所以答案为0次。原理: 最小数与最大数求平均值,以平均值与需要查找的数做对比,一次排除一半的数。优化3:一个数若能被整除则它小于被除数(num)的二次方必定也能被整除。每一个数必定可以被1与其自身整除,所以从2开始试除到(n-1)2.能被4整除但不能被100整除,或者可以被400整除的年份。优势:大大减少查找次数,提高效率(n个数,至多查找。试除法(将1到其本身的数依次做除法)原创 2023-05-01 18:39:51 · 73 阅读 · 0 评论 -
C语言:函数
在前文的初始C语言中,我们对函数已经有了大概的了解(子程序)。可是显然,只有这样基础的认识是远远达不到我们学习与使用的要求的。接下就让我们来进一步了解函数的相关知识。在编程语言的学习与使用中,有一些功能,是公认的,会被频繁重复使用。而如果不同的人每一次在学习与使用时,为了实现这些功能都要进行自己的编程。那么,显然是麻烦与低效的,也不利于初学者的学习。因此,C语言中将这些会被频繁使用的函数封装,存放入编译器的基本库,在日后的使用中只用调用即可。原创 2023-05-01 21:44:08 · 437 阅读 · 0 评论 -
初始C语言(3)
define M 100 //可以理解为替换 int main() {0 };int m = M;return 0;100# define M 100 //可以理解为替换 int main() {0 };int m = M;return 0;//#定义宏 # define ADD(x , y)((x) +(y)) //(x)成为整体不被干扰 // 名字 参数 宏的实现体 int main() {int n = 3;int m = 5;原创 2023-04-17 13:07:16 · 180 阅读 · 0 评论 -
初识C语言(2)
/定义一个整形数组,此数组内最多存放10个元素注:int 是指存放的数据类型,arr是数组名,[10]确定数组中元素个数,[]中必须是常量# define M 100 //可以理解为替换 int main() {0 };int m = M;return 0;100# define M 100 //可以理解为替换 int main() {0 };int m = M;return 0;原创 2023-04-16 22:59:56 · 448 阅读 · 0 评论 -
初识C语言(1)
1>类型 变量名;int age;类型 变量名 = 初始值;float定义的小数编译器默认是double类型,需在数值后加小写f,如55.5f。原创 2023-04-09 14:48:40 · 129 阅读 · 0 评论 -
scanf()输入函数相关知识的补充
在C语言的学习中我们会常常使用到scanf()(输入)与printf()(输出)这一对函数。printf()函数会将参数部分传递给它的字符打印出来,scanf()函数则会将我们我们通过键盘键入的字符,数字赋予指定的变量。可是,scanf()函数究竟时怎样实现这一行为的,是否真的就只是直接获取我们在键盘上键入的字符呢?让我们来看看下面这样一段代码。原创 2023-04-21 18:35:49 · 184 阅读 · 0 评论 -
C语言:分支与循环语句
在现实生活中,整个世界,每一秒都有着大大小小无数的事件在发生。世间万物你我都被牵扯其中,而这些纷繁庞杂不计其数的事件,绝大部分本质上它们都可以在逻辑方面被抽象为几种基础逻辑结构。它们无一不是以上的基础逻辑结构,或着是其中一种甚至多种的组合嵌套。世界上的语言无一不是帮助人类理解与描绘世界的工具,编程语言亦是如此。其创造者也深知这一点,基于创造编程语言借助计算帮助人类解决现实问题的初衷,程序结构化的设计是必然的。问题与事件逻辑脉络大多数都可以被结构化表示,可事件的组成,不仅仅只有其简单的逻辑脉络。原创 2023-04-21 18:34:07 · 84 阅读 · 0 评论 -
C语言:数组
引子:求一次考试中,五名同学的总成绩之和与平均分,并打印。int a = 0;//同学a int b = 0;//同学b int c = 0;//同学c int d = 0;//同学d int e = 0;//同学e int sum = 0;//总分数 printf("请输入五名同学的成绩\n");printf("a同学:");sum += a;printf("b同学:");sum += b;printf("c同学:");sum += c;printf("d同学:");原创 2023-05-09 09:36:25 · 139 阅读 · 0 评论 -
数据在内存中的存储方式
在之前的学习中,我们学习了许许多多的数据类型,而今天我们就来系统地学习关于数据类型的知识。原创 2023-08-31 14:53:57 · 417 阅读 · 0 评论 -
表达式求值的相关知识补充
因此,需要一套统一的标准来确定运算符参与运算的先后顺序,而在确定顺序后,还存在着参与运算的运算符优先级相同的情况,在这种情况下,表达式运算顺序就取决于运算符的结合性。在复杂表达式的求值过程中,计算有一套自己的运算规则(区别于不同的编译器,运算规则的细节上可能有所不同)。在a,b,c,e,d,f 都为变量时,两种计算路径的所得结果确实都相同,可是,当他们为。以上的两种计算顺序都符合运算的规则,可是他们的计算结果都是一致的吗?),所以,在日常的编程中,我们应该注意并避免此种情况的发生。原创 2023-05-20 11:49:55 · 172 阅读 · 0 评论 -
C语言:动态内存管理
malloc此函数会向内存申请一块连续的可用的内存空间,函数的返回值返回指向这块空间的指针。若开辟成功,返回一个指向开辟好空间的指针。(可对返回的指针类型做要求,使用强制类型转换实现,指针的类型决定了后续访问数据的方式)若开辟失败,返回一个NULL指针,因此对malloc的返回值一定要做检查若参数size为0,此行为在malloc函数中是标准未定义的。free此函数为专门用来做动态内存的释放和回收free函数是用来释放动态开辟的内存。原创 2023-08-04 12:03:45 · 109 阅读 · 0 评论 -
C语言实现:三子棋
(game.h)放置在自定义的头文件中,在主函数所在文件引用头文件,这样就可以完成程序的实现了。test.c文件。原创 2023-05-11 11:19:02 · 446 阅读 · 0 评论 -
C语言实现:扫雷
若此仍存在有周围八个方格都无地雷的情况,则重复上述步骤。直至排查到周围八个方格存在地雷的方格停止,并显示其数量。生成雷盘(9×9):用来布置地雷与排查对比的雷盘,地雷方格为。):用来显示排查结果,玩家从其上观察,获取信息,未排查方格。一个雷盘的中单位方格内。本方格内会显示,以本方格为基准。,非雷方格显示周围方格内的地雷个数。注:将雷盘的生成与显示分离,对一个方格进行一次排查后,原创 2023-07-11 16:50:50 · 435 阅读 · 0 评论 -
结构体练习:简单通讯器录的实现
而通讯录能够实现人员信息的存储之外,还能要有对信息的。用现有的知识创建一个通讯录,通讯录存储的人员信息包含。由此,我们来着手实现。(注:IDE:VS2019)数据存储的实现与信息初始化。原创 2023-08-02 10:41:52 · 74 阅读 · 0 评论 -
字符串和内存相关函数
字符串相关函数的操作对象只能是字符串,当我们需要操作的数据类型更多时,其就无法使用了。因此,接下来,我们引入内存相关的函数,它的操作是针对内存的,因此可以操作各种各样的数据类型。原创 2023-07-17 09:52:10 · 457 阅读 · 0 评论 -
字符与内存相关函数的模拟自实现
因为内存空间有重叠,所以使用一般的复制的方法可能会更改源空间内的内容,而导致无法拷贝完整内容。内存拷贝函数,其功能与memcpy相同,不同的,是此函数可用于源空间与目标空间重叠的情况。strlen函数的功能为计算字符串的长度,当遇到 '\0’会结束计算。在一串字符串中寻找是否存在另一串字符串。将一串字符串的内容拷贝给另一串字符串。比较两串字符串的大小。原创 2023-07-24 14:52:44 · 78 阅读 · 0 评论 -
C语言:文件操作
在之前的学习中,我们已经实现了自模拟通讯录,并为其升级添加了动态扩容功能。可在通讯录中存储添加的数据每每会在程序结束中伴随着程序销毁,在下一次运行访问通讯录时,之前的数据就丢失了。这是为什么呢,若我们想实现真正的数据存储我们又当如何去做。接下来就让我们来学习C语言中文件相关的知识。这里我们可以暂时把文件理解为存储在电脑磁盘上各种信息的合集。一是程序文件,此类文件包括类似源程序文件(后缀为.c),目标文件(windows环境下后缀为.obj),可执行程序(windows环境后缀为.exe)二是数据文件。原创 2023-08-10 11:59:07 · 172 阅读 · 0 评论 -
C语言:初识指针
在之前的文章中,我们已经对于指针有了初步的认识。指针,即内存中最小的单元编号,我们可以将其理解为内存空间的地址。在平时我们所提到的未经特殊说明指针都指的是指针变量。指针变量我们可以通过 &(取地址操作符),将变量的地址取出,随后我们将取出的地址放一个变量中,次变量即为指针变量。//在内存中开辟一块空间//存放变量a地址的指针变量return 0;我们已知一个内存单元的大小为1个字节,那么每个内存的地址是如何编址的呢。原创 2023-08-31 20:57:09 · 91 阅读 · 0 评论 -
C语言:指针详解
在初识C语言的学习中,我们已经了解了平时谈及的指针,就是指针变量(用来存放地址),大小固定为 4/8 个字节,且具有类型,其类型即为存放地址出对应的变量类型,决定了指针运算时(±整数)的步长。而我们通过对指针变量的解引用操作来实现函数对参数值的改变。接下来,就让我们进一步深入了解指针。我们已知数组为一类相同类型元素的集合,而指针数组即为指针变量组成的数组。//整形指针数组 char * arr2 [ 4 ];//一级字符指针数组 char * * arr3 [ 5 ];原创 2023-07-11 16:45:02 · 531 阅读 · 0 评论 -
指针进阶练习题
注:sizeof() 计算包括 ‘\0’,strlen() 计算不包括 ‘\0’注:解读时注意运算符的运算优先级。原创 2023-08-17 20:30:03 · 67 阅读 · 0 评论 -
浅谈:如何写出优秀的代码
我们日常中,会经常为了解决一个问题,取编写一段相对应的程序,最终,能解决问题的程序多种多样,除开解决问题的算法思路外,这些代码常常也有优劣之分,怎么判断一段代码的好坏,怎么让自己的代码更优秀,接下来我们就进行关于这一方面知识的学习。从上述代码我们看到,当我们用const修饰变量后,再通过正常变量赋值的方式去后续更改变量的内容是无法实现,可是,当我们通过对变量的地址解引用来访问此变量的内存空间的操作是可行的。在程序编译阶段出现的错误,大多都为语法上的错误,直接看错误提示信息(双击),解决问题。原创 2023-09-01 23:30:59 · 259 阅读 · 0 评论 -
C语言IDE:VisualStudio实用调试技巧
BUG的英文释义是“虫子”,现在人们通常会将计算机上发生的一些问题,比如系统缺陷、程序漏洞、轻微毛病、问题、故障等统称为bug(漏洞),人类历史上第一个程序BUG就是与虫子有关。1937年,有一天,计数人员在对一台计算机调试程序时出现故障,经过一阵子周折,发现有只飞蛾被烤糊在两个继电器触点的中间导致短路。于是把程序故障统称为“臭虫BUG”。环境选项中应选择debug选项,在此环境下代码才能正常调试。原创 2023-09-01 21:36:30 · 1032 阅读 · 0 评论 -
函数递归思考题
目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。(递归实现)操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。原创 2023-09-02 15:14:17 · 85 阅读 · 0 评论 -
C语言:程序环境与预处理
C语言中,存在着一些具有特殊意义,预先定义好的符号,如下:(此些符号会在文件编译的预处理阶段进行相应信息的替换填充)__FILE__ //进行编译的源文件路径名称__LINE__ //文件当前运行到的行号__DATE__ //文件被编译的日期__TIME__ //文件被编译的时间__STDC__ //若编译器遵循ANSI C语法标准,其值为1,否则此符号未定义printf("文件名:%s 行号:%d", __FILE__, __LINE__);1000。原创 2023-08-30 19:54:21 · 158 阅读 · 0 评论 -
自定义类型:结构体,枚举,联合
数组为一类相同类型的值的集合,结构体为一些不同类型的值集合,这些值称为成员变量。//定义变量的方式 //方法1 //声明类型的同时定义变量p1 struct Point {int x;int y;} p1;//方法2 //专门定义结构体变量p2 struct Point p2;//初始化:定义变量的同时赋值 //方式1 //创建变量时赋值 struct Point p3 = {x , y };//方式2 //声明类型时定义变量并赋值 struct Node //声明一个数据结点类型 {原创 2023-07-29 16:21:57 · 99 阅读 · 0 评论 -
C语言:操作符详解
1.2 取余2. 移位操作符2.1 右移操作符2.2 左移操作符3. 位操作符3.1按位与3.2 按位或3.4 按位异或3.5 拓展应用4. 赋值操作符4.1 赋值符4.2 复合赋值符5. 单目操作符6. 关系操作符7. 逻辑操作符我们来看这样一道题目:原创 2023-05-18 14:57:13 · 98 阅读 · 0 评论 -
C语言:初识结构体
/定义方式1://在声明结构体类型的同时定义变量p1int x;int y;}p1;//定义方式2://单独定义初始化:定义变量的同时,对变量进行赋值//单独赋值struct Stuint age;struct Stu s = {"张三",20};//结构体类型的嵌套定义//创建类型同时创建变量加初始化struct Node//结点int data;//数据域//坐标//下一个结点的地址//单独初始化。原创 2023-09-01 14:58:11 · 183 阅读 · 0 评论