c语言
文章平均质量分 50
c语言学习过程
嵌入式JunG
一个热爱嵌入式的小学生
展开
-
while和do while的区别
while语句都是循环语句,功能差不多,区别在于检验条件的时间上。while语句在进入循环体之前要先判断条件是否成立,如果成立的话则进入循环体;while语句则相反,是先执行循环体,再判断条件是否成立,成立的话则继续循环体,不成立则跳出循环,对于do…while语句,条件是否成立都要先执行一遍。例子如下(代码结构不同结果一致)原创 2023-10-12 21:52:07 · 632 阅读 · 0 评论 -
printf和puts的区别
1、puts的功能更单一,只能输出字符串;printf可以根据给定的格式输出多种类型的数据。2、put输入后会自动换行,而printf输入后需添加\n才能进行换行。原创 2023-10-13 02:45:00 · 386 阅读 · 0 评论 -
共用体开发案例
有若干个人员的数据,其中有学生和教师。学生的数据中包括:姓名、号码性别、职业、班级。教师的数据包括:姓名、号码、性别、职业、职务。要求用同一个表格来处理。原创 2023-10-29 22:38:02 · 189 阅读 · 0 评论 -
c语言中各类指针的总结
在c语言中,指针常被用于应用数组,或者作为数组的元素。顾名思义,指向数组的指针常被简称为数组指针。值得注意的是,数组指针指向的数组是数组名,也是其数值中首元素的地址。我们定义数组指针的方式如下:int (*p){n}={};(n为数组中的元素个数)其中p为二维数组首地址,*(p+i)为行的首地址,*(p+i)+j为列的首地址,*(*(p+i)+j)为i行i列的值。原创 2023-10-24 23:58:38 · 547 阅读 · 0 评论 -
字符串中的strcpy和strncpy区别
函数原型是char *strncpy(char *dest const char *src,int n),表示把src所指向的字符串中以src地址开始的前n个字节复制到dest所指的数组中,并返回被复制后的dest。函数原型是char *strcpy(char* dest, const char *src),含义是将src中的字符串复制到dest中。注意:src 和 dest 所指的内存区域不能重叠,且。原创 2023-10-26 22:21:57 · 205 阅读 · 0 评论 -
C语言中的两种常见排序法
【代码】C语言中的两种常见排序法。原创 2023-10-17 02:30:00 · 318 阅读 · 0 评论 -
一级指针和二级指针的使用理解
指针等同于地址,指针变量等同于存放地址的变量。我们运用代码展示给大家更好的理解一级指针和二级指针的使用方式。c输出保存b的地址是a的自身地址,b输出保存a的地址是a的数值,c直接输出保存a的地址输出的是a的值。由结果可见,二级指针c保存的是b的自身地址,而一级指针b保存的是整型数a的自身地址;可以看到通过指针访问a的地址与直接访问a的地址输出结果一样,说明指针保存的是地址。原创 2023-10-24 23:00:02 · 142 阅读 · 0 评论 -
结构体数组经典运用---选票系统
(这里的名称是分类出数值不同的角色),给结构体赋值是。原创 2023-10-28 03:00:00 · 261 阅读 · 0 评论 -
C语言中的斐波那契数列
【代码】C语言中的斐波那契数列和常见排序。原创 2023-10-16 20:51:53 · 82 阅读 · 0 评论 -
字符串中strcmp和strncmp的比较
函数原型是int strcmp(const char *s1,const char *s2),功能如下:若strl=str2,则返回;若strlstr2,则返回。:函数原型是int strncmp( const char * strl, const charstr2, size_t n),功能是把str1和 str2进行比较,最多比较,若str1与str2的前n个字符相同,则返回;若s1大于s2,则返回;原创 2023-10-27 14:07:12 · 256 阅读 · 0 评论 -
指针变量为什么要求类型
先定义一个16进制的a,虽然定义的指针类型变量不同,但通过编译结果可以看出其存放地址相同,但通过两个指针访问到的a输出的结果不一样,原因是计算机是32位,1个字节为8位,int型占4个字节,即32位;而char占1个字节,即8位,所以int能访问到a中所有的数,而char只能访问到a的后两位。可见开始指针类型变量不同但存放a的地址一样,但其指针自增(加1)后不同,是因为int加1是增加4个字节,所以int中的0C(12)变成10(16),而char加1是1个字节中的0C(12)变成OD(13)。原创 2023-10-21 17:22:03 · 207 阅读 · 0 评论 -
结构体指针的引入
两者的定义方式基本一直,普通变量通过指针访问地址数据,而结构体变量通过结构体指针访问。普通指针的定义int a,int *p;p = &a;结构体指针的定义p= &t。原创 2023-10-28 16:29:19 · 242 阅读 · 0 评论 -
字符串中的assert和strcat
使用方src所指向的字符串(包括'\0')复制到dest所指向的字符串后面(),那么它先 stderr 打印一条出信息,然后通过调用 abort 来。,以容纳被复制进*src中原有的字符不变,返回指向dest的指针。其作用是现计算表达式 expression ,如果其值为。使用assert 的缺点是,频繁的调用会。原创 2023-10-27 11:32:07 · 144 阅读 · 2 评论 -
字符串中sizeof和strlen的区别
sizeof算的整个数组的大小和数据类型所占空间大小,strlen算的是有效字符的大小原创 2023-10-25 22:36:16 · 156 阅读 · 0 评论 -
break和continue的区别
1、break用于跳出一个循环体或者完全结束一个循环,不仅可以结束其所在的循环,还可结束其外层循环。不管是哪种循环,一旦在循环体中遇到break,系统将完全结束循环,开始执行循环之后的代码。2、continue语句的作用是跳过本次循环体中剩下尚未执行的语句,立即进行下一次的循环条件判定,可以理解为只是中止(跳过)本次循环,接着开始下一次循环。break和continue都是用来控制循环结构的,主要作用是停止循环。可见我给郑老师打了四天功,第五天开始就没有了。举例:郑老师是我的上司,我给郑老师打工。原创 2023-10-13 12:15:29 · 51 阅读 · 0 评论 -
共用体/联合体 的引入
由一系列具有数据组成的集合,数据互斥关系,共用体所有的成员共同,其中空间的大小是按照共用体成员中所占的,即同一个内存空间,但不同类型的变量。原创 2023-10-29 17:33:07 · 103 阅读 · 0 评论 -
动态开辟字符串
函数原型是void *realloc(void *ptr, size_t size),C库函数 void *realloc(void *ptr, size_t size)尝试重新调整之前调用malloc或calloc 所分配的ptr所指向的内存块的大小。:函数原型是 void *malloc(size_t size)(size_t=unsigned int),C库函数 void *malloc(size_t size)分配所需的内存空间,并返回一个指向它的指针。4.对字符串进行初始化------原创 2023-10-26 18:27:27 · 296 阅读 · 0 评论 -
字符串的引入
字符串顾名思义就是字符数组,但其中有一些需要注意的地方,字符串的定义分别有一下几种,我们通过代码展示给大家更好的理解。原创 2023-10-25 21:05:00 · 176 阅读 · 0 评论 -
动态创建链表
动态创建链表的好处动态创建链表的好处相比于之前链表的几种功能介绍,都是在设定好的链表基础之上进行插入、删除等,那么如果我们要创建链表元素很多,就得去定义很多个元素结构体,非常不方便,这个时候应该用到。动态创建链表关键字就是创建,顾名思义就是,相应操作是一个一个分配结点内存空间,然后输入结点中的数据,并建立结点间的相连关系。动态创建链表的方法输入一个新结点并进行内存空间分配,同时进行判断,若为空指针则,返回链表头head;若不为空指针则将其作为链表头head,同时在输入下个结点时,将,同时让。原创 2023-11-03 00:00:00 · 495 阅读 · 0 评论 -
链表的引入
链表一种线性的数据结构,通过指针将一个个零散的内存块连接起来,链表的每个内存块称为结点。在这里得到了充分的利用。原创 2023-11-01 17:35:55 · 219 阅读 · 1 评论 -
c语言阶段性项目——贪吃蛇小游戏
ncurse(new curses)是一套编程库,它提供了一系列的函数,以便使用者调用它们去生成基于文本的用户界面。ncurses是一个能提供功能键定义(快捷键),屏幕绘制以及基于文本终端的图形互动功能的动态库。ncurses用得最多的地方是linux内核编译之前的内核配置,ncurses早已淡出舞台,甚至体验感完爆ncurses的C图形库GTK、C++图形库QT也区趋于落伍嵌入式设备上的Android 系统。这个游戏只是使用ncurses并不以学习它为目的,主要还是通过这个游戏锻炼我们C语言的能力。原创 2023-11-09 01:30:00 · 379 阅读 · 0 评论 -
链表指定结点的删除
删除节点分为两种情况,一种是链表头删除,另一中链表中间或尾部删除。将待删节点于前一节点解除指向(中间或尾部)或直接删除该节点并重建链表头(头节点)。:让其进入while循环,判断指定的节点是否为空指针,若为空指针说明是链表头,跳出循环;可见成功删除链表头,在删除链表头后选择任意位置(这里选择尾部)可再次进行删除。:让head指向第二个节点即可,同时让head为新的头节点。暂存此结点,再将链表头指向下一结点,最后将。定义一个删除链表函数(包含删除链表头)删除节点就是将指定节点从链表中删除。原创 2023-11-03 00:00:00 · 2686 阅读 · 0 评论 -
链表指定结点的插入
使用头插法和尾插法可分别解决第 1 和第 3 种情况,但是无法解决第 2 种情况,所以本节给大家一段通用代码,可有效解决所有链表结点插入的问题。(分为节点前和节点后)第一种是链表头插入,则链表头插入的地址改变了整个链表的地址,所以链表头插入的地址可以作为整个链表首地址,同时往下延申即可,就可以得到链表中的所有数据;这里是在原链表第三个节点处插入一个99,编译结果如下。主函数中创建一个新节点并调用以上两个函数。定义一个节点前插入函数(分两种情况)2.定义一个新节点,将。定义一个节点后插入函数。原创 2023-11-02 00:59:19 · 787 阅读 · 4 评论 -
链表的结点个数统计及查找
在上述代码中,我们定义了一个变量cnt来存储节点个数,然后遍历链表并在每人节点处将cnt加1,最终返回count可得到链表的节点个数。要统计链表中的节点个数,只需要遍历整个链表,并在遍历的过程中计数即可。具体实现代码如下:(仍然使用C#)先定义一个整型函数(节点个数的返回值一定是整型变量)在main函数中调用定义一个ret并调用该函数。原创 2023-11-02 00:57:58 · 707 阅读 · 1 评论