零基础C语言之路
文章平均质量分 89
这里是C语言零基础讲解,由浅入深,会逐步更新,若有不足,敬请指正
这里是彪彪
在学习c/cplusplus的路上
展开
-
柔性数组详解
在c99标准中:允许结构体的最后一个变量是未知大小的数组,这就是柔性数组的来源。原创 2023-08-21 13:47:47 · 179 阅读 · 2 评论 -
动态内存开辟
这里在Test函数中,只是将str指针本身传过去了,在Getmemory函数中,对形参p进行修改并不会影响到Test函数中str变量的值。出了Germemory函数str的值还是NULL,此时srtcpy函数对str这个空指针进行操作就是不合法的操作,导致程序错误。原创 2023-08-21 13:03:57 · 94 阅读 · 0 评论 -
动态内存管理详解
目前来回顾一下想要在内存中开辟空间有哪些方法?但是这两种开辟方式都有两个特点:用于开辟内存的函数:这个函数能申请一块连续的指定大小为 字节大小的内存,同时返回指向该内存的指针。用于释放内存的函数:free函数用于释放在堆上开辟的内存。malloc和free函数的声明都在 头文件中。接下来看几个例子:这里的代码是会报错的,因为数组的创建方括号里的值必须是常量。要特别注意。再看一个例子:这里在释放了动态开辟的空间之后,是否要将指向该内存的指针变量置为空呢?这里一定是要置为空的,可以有效防止后面对该指针进原创 2023-08-21 14:00:00 · 122 阅读 · 0 评论 -
通讯录(静态版)
int age;}PeoInfo;注意:这里数组内的常量最好是定义成宏,这样后续修改起来就很方便了。这里typedef类型重命名一下比较方便。这里就假设最多只能存下100个联系人。但是这样定义是否有一些缺陷呢?那就是假设我们存储了100个人,还想接着存储联系人,但是由于此时并没有变量来记录通讯录中的联系人的个数,就会产生容量不足的问题。所以,需要一个变量来记录存储的联系人的个数。那我们不妨将这两部分放到结构体里:定义一个通讯录结构体。int sz;}Contact;原创 2023-08-11 19:09:51 · 222 阅读 · 0 评论 -
自定义类型——枚举
枚举顾名思义就是一一列举。将可能的取值一一列举。像在这些场景中就可以使用枚举了。:(需要用到enum关键字)以上定义的enum Dayenum Sexenum Color都是枚举类型。{}中的内容是枚举的可能取值。也叫做枚举常量。注意:枚举类型里的可能取值都是常量。一旦枚举声明之后其成员的值是不能被修改的。原创 2023-08-09 14:00:35 · 158 阅读 · 1 评论 -
自定义类型——联合
联合也是一种特殊的自定义类型。发现联合每个成员的起始地址都是相同的,说明他们都是从同一个地址处开始增长的,包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)。:(需要union关键字)原创 2023-08-09 10:06:12 · 87 阅读 · 0 评论 -
自定义类型——结构体
结构体变量的定义:结构体变量的定义有两种方式:第一种:声明结构体的时候在变量列表定义结构体变量int x;int y;} p1;//声明类型的同时定义变量p1int x;int y;//定义结构体变量p2结构体变量的初始化:根据两种不同的定义方式,初始化方式也分为两种:int age;结构体的嵌套初始化:(在结构体中包含其他的结构体类型)int x;int y;int data;原创 2023-08-07 23:44:45 · 114 阅读 · 0 评论 -
C语言内存函数详解
memcpy函数函数功能:从source指向的内存空间处拷贝num个字节的内容到destination指向的内存中,当拷贝的内容是'\0'时,函数不会主动停下来,除非拷贝的内容达到了num个字节。使用案例:将arr2数组拷贝进arr1数组。0 };i < 10;10 };i < 10;注意。原创 2023-08-04 13:45:59 · 192 阅读 · 0 评论 -
字符串函数介绍&应用
C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在常量字符串中或者字符数组中。字符串常量适合于那些对他不做修改的函数。原创 2023-07-27 21:11:57 · 423 阅读 · 0 评论 -
指针进阶(三)
运行结果:int(*)[5];是数组指针,现在被强制转化成了int*类型,所以进行加减操作时,跳过的是整型的大小了,解引用操作也是向后访问一个整型的大小。第5行中的a是数组首元素的地址,也就是int*类型的地址,+1操作会跳过一个整型。指向如图所示,再解引用操作,最终的得到了2和5.原创 2023-07-26 17:41:47 · 668 阅读 · 8 评论 -
指针进阶(二)
这是因为void*类型指针变量可以接收任意类型的指针变量。因为对于这个函数的设计者而言,他也不知道用户要比较的什么类型的元素,所以就设计了void*这个可以接收任意类型指针的“万能指针变量”,原创 2023-07-20 18:14:33 · 78 阅读 · 0 评论 -
指针进阶(一)
指针的概念在之前的文章里已经讲解过了,其本质就是变量的地址。原创 2023-07-18 19:30:00 · 120 阅读 · 1 评论 -
C语言——数据在内存中的存储(下)
float.h运行结果:运行结果为何会这样呢?这就需要知道浮点数在内存中的存储规则了。原创 2023-06-01 19:13:39 · 523 阅读 · 5 评论 -
C语言——数据在内存中的存储(上)
概念:大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中。为什么有大端和小端?为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8 bit。原创 2023-05-30 23:40:12 · 855 阅读 · 1 评论 -
C语言——每日一题
举个例子:先从5开始,用5/7,无法整除,让5*2=10,用10/7,无法整除,让5*3=15,用15/7,无法整除……大概思路就是让其中一个数a乘以一个从一开始逐步递增的数i,得到的结果假若能整除b,那么此时的a*i就是要求的最小公倍数。这两个数假设为a和b,他们相乘得到的数ret一定能将这两个数整除,但是ret是不是最小公倍数还不一定,所以可以将a和b相乘的结果c进行减减操作,假若也能得到能整除a和b的数,将c赋值给ret,如此往复,直到c不小于a和b中的最大值。向后移动,直到遇到了空格就停止,。原创 2023-05-26 20:56:06 · 808 阅读 · 1 评论 -
编程终极技能-调试
Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优 的,以便用户很好地使用。实例一。原创 2023-05-25 20:58:31 · 562 阅读 · 1 评论 -
C语言-数组
数组是一组相同元素类型的集合。数组的创建方式:实例一:注意:数组创建,在C99标准之前, 中要给一个常量才可以,不能使用变量。在C99标准支持了变长数 组的概念,数组的大小可以使用变量指定,但是数组不能初始化。但是visual studio编译器不支持变长数组。例如gcc编译器就支持c99中的变长数组。数组的初始化是指,在创建数组时,给数组的内容一些合理的初始值。实例二:实例三:对于一维数组的元素的访问,要用到 操作符。实例四:实例四中,成功的对数组元素进行了赋值和打印。在赋值时,的值最好设置成数原创 2023-05-20 23:04:08 · 120 阅读 · 2 评论 -
C语言操作符(下)
逗号表达式,就是用逗号隔开的多个表达式。 并且从左向右依次执行。整个表达式的结果是最后一个表达式的结果。例如:将第3行的代码从左至右依次执行,可得最后c的值为13.函数调用操作符 ,操作数:该符号的操作数不定,当调用无参数函数时,就只有一个操作数,即函数名。 访问一个结构体的成员(两种方式)3. 表达式求值我们现在将操作符介绍的差不多了,但是当一个表达式中含有多个操作符时,计算顺序是怎样的呢?表达式求值的顺序一部分是由操作符的优先级和结合性决定的,同样,有些表达式的操作数在求值的原创 2023-05-17 22:23:56 · 45 阅读 · 0 评论 -
C语言操作符(上)
操作符操作符的分类想必大家都知道,这里就不赘述了。本文只是介绍其中的一部分操作符。算术操作符主要有:其中除法(/)分为两类:注意:%(取模)的结果是余数。并且取模操作符的两个操作数必须都是整数!<< 左移操作符>>右移操作符【右移】:补充:整数的二进制表示形式有三种:原码,反码,补码。原码反码补码的计算方法:一个整数,无论正负,直接将其翻译为二进制序列,该二进制序列就是原码。因为15是被存放在int型中的,而int型有32个比特位,其最高位表示符号位,将其翻译成二进制位就是:就得到了a的原码。因为a是1原创 2023-05-16 23:27:38 · 59 阅读 · 0 评论 -
C语言实现扫雷(详解版)
扫雷游戏想必小伙伴们都玩过,本质就是在一片由空地和雷组成的区域上,(当然我们看不到哪里是否有雷,在玩家看来,都是空地),玩家一个一个的排查坐标,倘如该坐标是雷,则游戏失败。倘若该坐标不是雷,则在在坐标显示其上下左右以及对角区域(加起来八个坐标)含有的雷的个数。原创 2023-05-14 23:06:36 · 229 阅读 · 0 评论 -
C语言实现三子棋(详解版)
C语言实现三子棋(详解版)原创 2023-05-09 09:31:17 · 335 阅读 · 1 评论 -
C语言-函数
库函数虽然很常用,但其也无法完成生活中的全部需要,不然还需要程序员干什么呢,库函数不够用时,我们就可以自定义函数,自己实现它。自定义函数和库函数一样,需要函数名返回值类型函数参数列表函数体。写个函数求两个数的最大值//语法格式:返回值类型 函数名(参数列表){函数体} int get_max(int x , int y) //此处用x,y接收a和b。(x) :(y);//这里要返回的数的类型与返回值类型是对应的 } int main() {return 0;我们再写一个能交换两个数的函数。原创 2023-05-01 11:36:29 · 55 阅读 · 3 评论 -
一篇文章让你明白C语言中的分支与循环语句
分支,循环原创 2023-04-18 20:23:12 · 74 阅读 · 3 评论 -
初识C语言_Part 2(零基础超详解!)
/编译失败 报错 int main() {0 };return 0;数组的括号内必须是常量因为被const修饰的变量本质上还是变量。那么这里提到的define关键字就可以定义真正的常量。这里特别注意c99标准之前,数组的大小不能是变量。但在c99标准中引入了变长数组的概念,这时允许数组的大小是变量,但是不能直接被初始化,但是visual studio编译器不支持变长数组。但是有些编译器是支持的,例如:gcc编译器就支持c99中的变长数组。注意使用define时,前面的#不要忘了哟。原创 2023-04-13 23:29:35 · 76 阅读 · 5 评论 -
初识C语言_Part 1(零基础超详解!)
首先,下面这段代码是该.c源文件的主函数,也称main函数return 0;注意:1.一个C语言程序是从main函数开始执行的,所以main函数是整个程序的入口。2.C语言源程序只能含有一个main函数。(若含有多个main函数,C程序不知道该从哪里开始执行了,可以暂时这样理解)3.C语言的main函数不仅有这一种写法return;4.对于写法二并不推荐,这种写法是在C语言诞生之初的写法,现在不太适用了。5.main函数还有一个带参数的写法,现在暂时不谈,后续会讲解。原创 2023-04-01 23:31:50 · 317 阅读 · 6 评论