
C语言的细节
One Piece是存在的
好好学习天天向上
展开
-
Linux线程(pthread)概念以及编程
线程被调函数的定义是空指针类型的如: void *func1()pthread 线程的意思。在main函数中,pthread_create(&th1,NULL,func1,&arg);创建线程的意思 (取线程一的地址,一般为空,线程,执行函数, func1函数的参数(取参数的地址) )3.main函数的意思是,执行两个线程的同时,while死循环不停止main函数里面的进程打印。1.简的来说,线程的概念就是在一个程序中,同时进行多个函数的运行比如以下代码。gcc 不要忘记 -lpthread。原创 2024-04-27 06:00:00 · 288 阅读 · 0 评论 -
动态创建链表 与头插法 和头插法的优化
creatLinkHead() 函数中,开辟new 节点的空间,在while(1)循环中,无限输入data,若data为0则跳出循环,不为0则调用插入函数insertFromHead()思想:在main函数中实行三次头插法,在insertFromHead()函数中,主要创建新的节点new,开辟空间,输入想要增加的data;在insertFromHead()函数,用while(1)无限循环 输入, 当输入的data =0 时;insertFromHead() 函数中,判断head是否为空,否则插入。原创 2024-04-24 00:37:10 · 579 阅读 · 0 评论 -
链表从指定节点后方插入新节点
【代码】链表从指定节点后方插入新节点。原创 2024-04-22 21:43:45 · 234 阅读 · 0 评论 -
链表从指定的节点前插入新的节点
在头节点插入时,head和p都指在1,new ->next = head;返回new节点地址,由打印函数打印即可成功插入。2.1当我们要在第2个节点插入时,p和head都是指向1节点的,我们得用while循环判断p->next!如果相等则:new->next = p->next;当我们想要改变的节点都不在1,2节点,而头节点又在1节点位置时;否则:printf("no this data %d",data);返回head(头节点);我们要在所在的节点的data值。原创 2024-04-23 00:22:00 · 545 阅读 · 0 评论 -
动态创建链表 之尾插法
尾插法:其实与头插法相差不差,在尾插法函数中insertBehind(),传过来的head尽量不变,struct Test *p;创建临时指针p = head;同样的,也是先判断 传过来的head 是否等于 0;等于0,则 head = new;也是用while 循环判断 p->next!不为空一直循环到为空跳出,跳出则:p->next = new;原创 2024-04-24 00:36:59 · 296 阅读 · 0 评论 -
贪吃蛇身子改进加贪吃蛇向右移动
2.1 .开辟new 节点的空间 struct Snake *new = (struct Snake *)malloc (sizeof(struct Snake));free(p) 防止造成多的空间节点。新的尾巴 : tail = new;新节点的列 new ->lie =tail -> lie+1;2.2 . 新节点的行 new ->hang = tail -> hang;增加new节点 :tail -> next = new;原创 2024-04-26 06:00:00 · 643 阅读 · 0 评论 -
优化贪吃蛇在前进过程中,前进和后退的问题
3.1 初始化食物initFood(), 蛇碰到食物函数hasFood(),在移动过程中if函数把蛇的尾巴的行和列传过来调用hasFood()来初始化食物initFood()在ifSnakedie()函数中,第一个if是判断是否撞墙,因为while每次都会遍历完到自己,为了防止遍历到自己,p->next!=NULL 忽略自己与自己比较,2. 在转向函数turn()中,如果绝对值不相等的时候才赋予方向的值。3.3撞到自己的时候死亡。在移动蛇的函数里面做修改。3.贪吃蛇吃食物的思路。原创 2024-04-27 17:33:59 · 389 阅读 · 0 评论 -
贪吃蛇身子打印 -- 第二十九天
2.增加蛇的身体:void addNode() 函数;原创 2024-04-25 21:41:26 · 140 阅读 · 0 评论 -
引入线程的贪吃蛇风骚走位
5.从改变方向的函数changeDir()函数中获取dir的方向,在增加节点函数addNode()中,用switch函数实现蛇方向的改变。3. 也是无限循环while(1) 定义key 从键盘获取输入方向,赋值给dir;1.在main函数中分别引入线程t1 和线程 t2。一个线程用来刷新界面,一个线程用来改变方向。4.在初始化函数中确定蛇向有行走为方向。2.刷新界面函数,无限次刷新。原创 2024-04-27 15:23:01 · 250 阅读 · 0 评论 -
Linux 的情况下实现贪吃蛇 -- 第二十八天
2.2:在第一行和第十九行 :打印 " | " 和空格" " 然后换行。当在19行的时候:打印 '' -- ''然后换行。分三部分实现:2.1: 在第0行:打印 "--"," | "和" "(空格)然后换行。2.思路:初始化initNcurses(), 封装地图函数实现地图gamePic()1.keypad(stdsrc,1) 参数表示是否接收,1表示接收指令。原创 2024-04-24 22:09:03 · 192 阅读 · 1 评论 -
贪吃蛇撞墙功能的实现 和自动行走刷新地图 -- 第三十天
3.在撞墙后初始化蛇,如果头不为空就撞墙,得定义临时指针指向头,释放头节点。2. 在增加和删除节点后,判断是否撞墙,撞墙则初始话蛇。1.最初的头和尾指针要置为空,不然是野指针。原创 2024-04-26 23:02:35 · 280 阅读 · 0 评论 -
链表删除指定节点 ---第二十七天
1.free()函数,需要动态的地址,所以首地址需要开辟malloc(),p-next = &t2;(首元素data为1)原创 2024-04-23 22:11:55 · 167 阅读 · 0 评论 -
字符指针和指针数组
8个字节和四个字节相除的结果分别是2和1,取决于X32和X64。原创 2023-08-15 21:36:03 · 74 阅读 · 0 评论 -
C语言的结构体
而前面没有typedef,struct Stu为结构体类型,s1,s2,s3是三个全局的结构体变量。例如一个学生,结构体的数据 ,struct是结构体的关键字,Stu是结构体的标签,struct Stu是结构体类型。主函数中加入print2(&s)取的是s结构体Stu类型的地址。结构体的成员可以是标量,数组,指针,甚至是其他的结构体。由这四部分分别是类型的声明,初始化,成员的访问,传参。结构体的访问是通过(.)符号来访问的。我们学习了结构体的传参之后,思考一下。2.结构体的定义和初始化。原创 2023-08-13 22:44:36 · 79 阅读 · 1 评论 -
初识指针需要了解哪些
1.&a是取a的地址放入一个变量p当中。p里面存的是地址,地址也就是指针。2.指针的加减是取决于指针的类型向前或者向后一步多大的距离。野指针的意思是局部变量未为初始化,默认为随机值。5.指针指向的空间释放。原创 2023-08-06 22:14:19 · 57 阅读 · 0 评论 -
【无标题】
逻辑或,从左到右的顺序,第一个判断结果为真后面就不要算下去了,不管后面是假还是真都不算了。struct (结构体 ) Stu(类型 )花括号里面是对象元素。逻辑与操作符,左边要是假,右边不管是什么都不执行了。3.下标引用操作符,函数的调用和结构成员。原创 2023-08-06 21:50:29 · 62 阅读 · 0 评论 -
运算符的总结
左边是最高位,a为-1最高位 为1,4个字节,一个字节8个比特位;反码是高位为1其余的相反;% 取模运算符也就是取余的意思,取余的结果的正负号跟被除数总是一样的。a )里面的逻辑反操作符的意思是!算术右移:右边丢弃 左边补原符号位(用的大多数)按位与是上下相同的数字就为0,不相同的数字为1。<<左移运算符 :左边丢弃,右边补0。按位或就是不同的为1,相同的也为1。逻辑右移:右边丢弃,左边补0。有原码,反码,补码三种表示。sizeof计算字节符号。2.1移动的是二进制位。原创 2023-08-05 22:08:19 · 69 阅读 · 1 评论 -
C语言数组扫雷
3.接下来的步骤就是布置好雷的信息函数char mine【】【】(布置区域的数组大于排查区域的数组),排查雷信息函数char show【】【】两个二维数组,初始化数组信息函数InitBoard()运用for循环;同样的跟上一篇文章的五子棋的差不多,重要的是放置雷这一步骤。2.test()函数中打印菜单函数menu(),从do while 循环用switch写入game()函数;还运用到统计雷的函数,int count=get_mine_count ()4.布置雷函数SetMine()原创 2023-08-04 20:58:36 · 67 阅读 · 1 评论 -
简易数组版五子棋
最后总结一下知识点:game.c文件,game.h头文件test.c文件 test()函数 ,game()函数打印菜单,存储空间的二维数组,初始化函数InitBoard(),在game()函数里面运用到playerBoard()和ComputerMove()函数和打印Displayer()函数;4.用while循环一直下棋直到有人赢了为止,其中用到人下棋函数playerMove()打印棋盘函数DisplayBoard()和电脑下棋函数ComputerMove()函数;原创 2023-08-02 21:54:07 · 109 阅读 · 0 评论 -
冒泡排序和数组名的细节
arr数组 ,我们对arr数组进行传参,实际上传递过去的是数组arr首元素的地址 &arr【0】2.然后每一趟的排序是前后比较,9 8 7 6 5 4 3 2 1。bubble_sort(arr,sz)是冒泡排序函数。以上面为例子,对arr进行排序,升序。1.先确定冒泡排序的趟数,9趟。原创 2023-08-01 20:54:46 · 53 阅读 · 1 评论 -
函数的调用和数组的小细节
当n大于9时调用printf(n/10) ,n等于123余4,再次循环调用printf(n/10),等于12余3;再次等于1余2,再次循环1/10余1;不符合条件则递归返回输出1 2 3 4。4.这个是比较容易错的点,很多人都以为这个是3,但是错误点在于不知道后面的\0在哪,所以后面是随机值。1. sizeof是字符大小,为字符串长度X char型字节为1等于4。原创 2023-07-31 19:42:25 · 62 阅读 · 1 评论 -
C语言的编译过程
define 和include是关键字吗?原创 2023-07-30 21:44:43 · 63 阅读 · 0 评论 -
嵌入式需了解的Gcc的概括和他的成员
gcc -v -o build 001.c 版本信息打印。全名:GNU compiler collection。gcc -o 输出文件名 输入文件名。原创 2023-07-30 18:14:49 · 70 阅读 · 1 评论 -
函数和递归
递归就是把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。主要的思考方式为:把大事化小。接受一串字符,计算它的长度。例如:bit 长度:3。原创 2023-05-05 17:39:30 · 81 阅读 · 1 评论 -
C语言函数调用的细节
实参可以是:(1)常量:1,3,4等等 (2)变量 (3)表达式:300+1,789+857,等 (4)表达式等 无论实参是哪种类型的量,在函数调用的时候必须有确定的值,以便这些值传给形参。·这种传参方式可以让函数和函数外边的变量建立起联系,也就是函数内部的变量可做外部的变 量 通常使用空类型函数的时候会使用:void()函数。·传址调用是把函数外面创建的变量的内存地址传递给函数参数的一种调用函数的方式。函数的形参和实参分别占用不同的内存块,对形参的修改不会有影响实参。原创 2023-04-19 18:08:16 · 140 阅读 · 2 评论