![](https://img-blog.csdnimg.cn/direct/9bffa57b25064ac8a500c8bf4f11a5b5.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
C语言阶段知识
文章平均质量分 56
从c语言语法着手,总结相关知识,和一些项目,还有一些编程算法。
robin_suli
普通it大学生一枚,会在博客分享总结知识
展开
-
扫雷游戏初阶版
雷和⾮雷的信息不要使⽤数字,使⽤某些字符就⾏字符‘1’是雷,字符'0'非雷,这样就避免冲突了,棋盘上有雷和⾮雷的信息,还有排查出的雷的个数信息,就⽐较混杂,不够⽅便。扫雷的过程中,第一个问题是布置的雷和排查出的雷的信息都需要存储,所以我们需要⼀定的数据结构来存储这些信息。而在本游戏中,采用的是9*9的格子,随机布置十个雷,玩家要将所有非雷的格子排查完才算胜利。在本篇博客中,会将游戏分为三个部分完成,便于用户管理,组织,以及理解,也符合程序的高内聚低耦合,使程序变得更加清晰,也可以养成好的代码习惯。原创 2024-01-15 12:36:31 · 438 阅读 · 0 评论 -
C语言结构体的理解
结构体的第⼀个成员对⻬到和结构体变量起始位置偏移量为0的地址处 ,其他成员变量要对⻬到某个数字(对⻬数)的整数倍的地址处。对⻬数 = 编译器默认(vs默认对齐数为8)的⼀个对⻬数 与 该成员变量⼤⼩的较⼩值, Linux中 gcc 没有默认对⻬数,对⻬数就是成员⾃⾝的⼤⼩;结构体总⼤⼩为最⼤对⻬数(结构体中每个成员变量都有⼀个对⻬数,所有对⻬数中最⼤的)的整数倍;如果传递⼀个结构体对象的时候,结构体过⼤,参数压栈的的系统开销⽐较⼤,所以会导致性能的下降,结构体传参的候,要传结构体的地址。原创 2024-03-22 16:57:23 · 924 阅读 · 4 评论 -
c语言-->对指针的理解——浅出深入
计算机上的CPU在处理数据的时候,需要的数据都是在内存中读取的,处理后的数据也会放回内存中,这些内存也当然需要高效的管理那么计算机,怎么样管理呢?其实就是把内存划分为一个一个的内存单元,每个内存单元的大小取一个字节,每个内存都有自己的编号,也就是地址,便于计算机高效的进行访问,不会像无头的苍蝇一样。3.在指针类型中有⼀种特殊的类型是 void* 类型的,可以理解为⽆具体类型的指针(或者叫泛型指。函数指针变量就是用来存放函数地址的,未来通过地址能够调用函数的,他的使用如下。二.指针变量和指针的使用。原创 2024-03-06 23:47:21 · 394 阅读 · 1 评论 -
strlen和sizeof的基本用法
1.sizeof是运算符,计算的是分配空间的实际字节数(也可以计算字符个数);但是不能计算动态分配空间的大小。而strlen是库函数(所以要引用头文件,#include)计算的是字符串的字符个数。3.当这样初始化时,不会在后面加'\0'.所以strlen后面会有随机值而加上元素个数则会,加'\0'2.他们的区别:strlen只能计算'\0'前面的字符数,而sizeof会算入'\0'.原创 2023-12-14 00:14:16 · 409 阅读 · 1 评论 -
操作符及实操
一: 操作符有:移位操作符:{ 左移操作符(<<),右移操作符(>>)},位操作符:按位与,按位异或,按位取反 (&, ^, |, ~)。1. 左移操作符有乘2的效果,右移操作符有除2的效果.当然也有特殊eg:-1.左移操作符移位规则:左边抛弃、右边补0。右移操作符大部分编译器都是算术右移:左边⽤原该值的符号位填充,右边丢弃。2. 位操作符也有很大用处,下面给几个例子:1.计算二进制中1的个数(用按位与)2.不创建临时变量交换两个整数(用按位异或)等等还有一些题可以去牛客里看看。原创 2024-02-17 11:44:43 · 345 阅读 · 0 评论 -
数据在内存中的存储
法有三种,即原码、反码和补码,三种表⽰⽅法均有符号位和数值位两部分,符号位都是⽤0表⽰“正”,⽤1表⽰“负”,正整数的原、反、补码都相同。1.其实超过⼀个字节的数据在内存中存储的时候,就有存储顺序的问题,按照不同的存储顺序,我们分为⼤端字节序存储和⼩端字节序存储。数字M前加上第⼀位的1。4.对于64位的浮点数,最⾼的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有效数字M(double)3.对于32位的浮点数,最⾼的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数M(float)原创 2024-03-19 17:00:44 · 266 阅读 · 2 评论 -
c语言内存函数模拟及实现
这个我画了个图可以辅助理解这段代码:我们知道数组在内存中的储存是从低地址到高地址,如图所示。2.如果source和destination有任何的重叠,复制的结果都是未定义的。并且遇到'\0'是不会停下来的。1.函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。1.和memcpy的差别就是memmove函数处理的源内存块和⽬标内存块是可以重叠的。1.memset是⽤来设置内存的,将内存中的值以字节为单位设置成想要的内容。原创 2024-03-15 20:02:17 · 347 阅读 · 1 评论 -
书写代码时return三大注意事项
2.return返回值和函数返回类型不一致时 系统会自动把返回的值隐式转化为函数的返回类型。3.函数中存在if语句,每一种情况都要return返回否则会报错。1.书写代码,return语句可以是空语句,但是不会执行。原创 2024-01-17 18:15:19 · 350 阅读 · 3 评论 -
C语言文件操作(详细)
数据在内存中以⼆进制的形式存储,如果不加转换的输出到外存的⽂件中,就是⼆进制⽂件。C程序针对⽂件、画⾯、键盘等的数据输⼊输出操作都是通过流操作的⼀般情况下,我们要想向流⾥写数据,或者从流中读取数据,都是要打开流,然后操作。如果没有⽂件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运⾏程序,是看不到上次程序的数据的,如果要将数据进⾏持久化的保存,我们可以使用文件。但是在程序设计中,我们⼀般谈的⽂件有两种:程序⽂件、数据⽂件(从⽂件功能的⻆度来分类的)。原创 2024-03-26 22:50:21 · 738 阅读 · 6 评论 -
C语言编译和链接理解
程序同时也可以使⽤静态(static)内存,存储于静态内存中的变量在程序的整个执⾏过程 ⼀直保留他们的值。1.词法分析:将源代码程序被输⼊扫描器,扫描器的任务就是简单的进⾏词法分析,把代码中的字符分割成⼀系列 的记号(关键字、标识符、字⾯量、特殊字符等)。处理#include 预编译指令,将包含的头⽂件的内容插入到该预编译指令的位置。编译过程就是将预处理后的⽂件进⾏⼀系列的:词法分析、语法分析、语义分析及优化,⽣成相应的汇编代码⽂件。翻译环境和运行环境:在ANSI C的任何⼀种实现中,存在两个不同的环境。原创 2024-03-28 21:48:25 · 975 阅读 · 5 评论 -
C语言单向链表的经典算法
著名的Josephus问题 据说著名犹太 Josephus有过以下的故事:在罗⻢⼈占领乔塔帕特后,39 个犹太⼈与 Josephus及他的朋友躲到⼀个洞中,39个犹太⼈决定宁愿死也不要被⼈抓到,于是决定了⼀个⾃杀 ⽅式,41个⼈排成⼀个圆圈,由第1个⼈开始报数,每报数到第3⼈该⼈就必须⾃杀,然后再由下⼀ 个重新报数,直到所有⼈都⾃杀⾝亡为⽌。创建新的空链表,遍历原链表,将节点小的链表拿到新链表中尾插。刚开始新链表为空,注意每次尾插都要,把该节点定位尾节点。1.思路:创建新链表,小链表和大链表。原创 2024-04-16 23:30:47 · 576 阅读 · 9 评论 -
对C语言分支和循环的粗浅认识
最后就是for语句了,这语句是集合了(初始化,判断,调整于一起的循环,非常方便好用。其次,do while语句这个语句,和其他语句有点区别,,它会先做一遍,再看看还做不做,表达式里就是判断还做不做。首先,while语句和if语句用法基本一致哈。都是有条件满足条件表达式就做他们之后的程序的命令。2,循环语句 :do while语句,while语句,还有for语句。其次switch的基本用法: 这个语句值得注意的是,表达式必须是整形。1.分支语句有:if语句,switch语句。原创 2023-12-05 21:43:24 · 377 阅读 · 1 评论 -
对for循环和while循环的理解
对于for循环来说他的基本模式是【for(表达式1;表达式1为:“初始化”,表达式2为:“判断”,表达式3则为:“调整”,这里的表达式可以省略会有不一样的效果(具体情况具体分析);while循环则有条件和调整和“if”语句相似。他们的差异就代表,他们的用法也不同。就用,"break",continue来说明(continue可以跳过本次循环,再判断下一次循环要不要进;他们的不同在于:由于while语句的调整写法与代码位置的不同,所以它在用"continue"时可以跳过调整那部分代码,导致死循环。原创 2023-11-19 00:23:37 · 46 阅读 · 0 评论