自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 c语言第八课(树)

{//如果右子树为空,判断本身为双亲的那边的子树,将待删结点的左子树指向待删结点的指针指向它的双亲,最后放掉内存。{//如果左子树为空,判断本身为双亲的那边的子树,将待删结点的右子树指向待删结点的指针指向它的双亲,最后放掉内存。{//如果左右子树都为空,判断本身为双亲的那边的子树,然后将指向待删结点的指针指向空。树的定义:除根结点外,每个结点有一个前驱结点,除叶子外,每个结点都有至少一个后驱结点。孩子:每个结点的子节点,即它的后驱称为该结点的孩子,叶子没有孩子。树的度:树中结点的最大的度,即为树的度。

2023-08-11 16:19:13 58 1

原创 C语言第七课(队列)

int FindFirstByElement(DLlist *list, ElementType element) //查找第一个与值相同的数并返回位置。{//哪个队列的数为零,就将另一个队列里的值留下最后一位,其余全压入数为零的队列中,再返回那个最后的值,以此来实现栈的先进后出。

2023-08-09 11:26:45 56 1

原创 c语言第六课(链表)

双向循环链表,链表的list->tail. next=list->head list->head.prev=list->tail 即头的上一个指向尾,尾的下一个指向头。//将node的next指针指向的节点指向的下一位指向node。if(node->next==NULL) //当node的next指向空时,结束递归,返回node。//cur指向下一个节点的指针指向prev。

2023-08-07 09:28:57 55 1

原创 自搭库DynamicArray

/找到后数值加一,并将下标储存在新定义的数组内,(因为返回的数组需要知道边界,我们用第一个地址来存储边界)同时空出第一个地址,用来储存,找到的值的数量。//对堆上申请的空间进行扩容,因为使用realloc扩容的话太不可控了,所以我们进行重新申请,并复制内容到新开辟的动态数组,然后再释放原动态数组。//因为返回的数组需要知道边界,我们在元素查找储存完之后,下一个指针存储为-1,由于指针不会有-1这个值,所以人为规定一个休止符来规定数组的边界。确保判断完全部的函数。//有要存入的值,标志位定义为1。

2023-07-28 21:00:16 60 1

原创 c语言第五课(堆:内存管理)

表示在p重新开辟空间或扩展空间到16个字节,但同时注意,如果是重新开辟内存的话,要将p中存储的原先的内存地址存储起来,否则后续释放内存时找不到地址。(因为申请空间后不释放,所以默认这块内存被占用,但由于函数结束后,申请的地址也会被销毁,所以最后这块内存就好永远被占用,称为内存泄漏。作用:在刚启动函数的时候输入参数,可以传入参数,函数第一个输出一定是当前文件的文件名,之后的输出按文件内代码定义输出,作用:登录界面。使用方式:int *p=(int *)malloc(sizeof(int));

2023-07-26 17:41:28 48 1

原创 c语言第四课(二级指针和二维数组)

int a[2][3]={{1,2,3}{4,5,6}}与int a[2][3]={1,2,3,4,5,6}是等价的。&a[0]:与a完全相等,表示二维数组的首行地址,步长为一行数组,在此为12字节。&a[0][0]:二维数组首行首元素的地址,步长为该元素的数据类型,在此为4字节。指针数组(int* p[4]):数组里的每个元素都是指针,本身是一个数组。字符串指针数组:特点:数组里的每一个数组指针都是连续的,它所指元素的地址。a[2][3]=>[2]代表行,[3]代表列;*a:表示数组首行首元素的地址。

2023-07-24 11:45:44 188

原创 123456789*987654321用c语言表示

/利用数组的地址+i来巧妙的表示10的i次方,之后用b的每一位分别与a的所有位数,之后每位的乘积依次相加并判断是否进位。//判断每一个数组有没有超过10,有的话就保留个位,printf("%d",c[j]);//输出数组内的值,其值为运算结果。//定义一个数组c用来承接a与b的乘积。这两个数的乘积无疑超过了所有数据类型的边界,所以在这里我们仍然用数组来储存。

2023-07-19 21:08:04 263

原创 c语言第三课(数组与指针)

prt2:字节+1,按逻辑一个输出第一个整型剩下的3个字节,向第二个字节补足一个字节,但由于计算机不能这样输出,所以遇上类似题型可以这样表示,但不能这样输出。得益于终止符的方便,我们可以对字符串进行一系列的操作,但同时,字符数组所占的内存实际上也会比字符串长度1,多的这个也就是这个终止符’\0。&a[0]:传入的是数组首元素的地址,走一步跨越的是定义这个数组的数据类型大小(int型跨4个字节,char跨1个字节)&a:传入的是数组的首地址,走一步跨越的是整个数组,从数组开头到数组结尾。

2023-07-19 11:31:44 35

原创 将字符串反置

/传入str+start为单词的开头,len为单词的长度,意思是数组从传 入的这个地址开始反置,到这个单词反置完后结束。void exchange(char* str) //由于需要单词顺序正确,所以通过空格和字符串内容终止符来判断是否为一个单词,再传入内容倒置的函数。//测量字符串的长度。if(str[i]==' '||str[i]=='\0') //判断是否为一个单词。

2023-07-19 10:44:50 200

原创 C语言计算并输出2的10000次幂

i++) //因为是2的10000次幂,所以循环10000次。//2的10000次幂值不会超过100位,我们定义一个空数组来储存。2的10000次幂,这个数值太大了,无论哪个数据类型都无法直接存储,所以这里我们用数组来存储这个数值的每一位。} //判断每一个数组有没有超过10,有的话就-10并且下一位+1。//利用循环将数组中的每一位都乘以2,用来等效整个数值乘以2。} //依次输出每个数组,其值就是2的10000次幂。

2023-07-19 09:40:27 280

原创 库的使用和编译

3、gcc main.c -o main -L. -l* (-L.为指定加载的库的路径,-l*指定加载哪个静态库,-l后面加的是静态库名。2、ar rcs lib*.a *.o (rc:表示创建 s:表示更新 lib为生成静态库所需的文件前缀 .a为文件后缀)1、gcc -c *.c -o *.o(编写静态库需要先将文件转换为二进制文件即.o文件)-o2:在-o1的基础上进行进一步优化,提高目标文件运行性能。-o3:在-o2的基础上进行进一步优化,支持函数集成优化。

2023-07-17 19:35:34 156 1

原创 makefile的语句

为了不和真实的目标文件混淆,一般会使用 .PHONY:伪目标名 对伪目标进行标识。main:$(变量名) ps:其中main为目标文件,即需要生成的文件,$(变量名)为依赖文件,即生成main是需要的文件。之后输入make clean,变会执行清除指令,但注意,伪目标指令不会生成相应的执行文件。其后的代码中可以用$(变量名)来代替“a.c b.c c.c ”使用方法:$(变量名)=a.c b.c c.c。最终$(a)=a.c b.c c.c。$(变量名)=a.c b.c c.c。

2023-07-17 14:40:31 67 1

原创 嵌入式Linux开发环境的使用

使用ls -l后可以看见如图信息,其中 d表示该文件是个文件夹而后的rwx分别表示可读可写可执行,三个rwx分别表示文件所有者、群组用户、其他用户。最高位表示文件所有者的权限值,中间位表示群组用户的权限值,最低位则表示其他用户的权限值,我们用三位二进制来表示是否具有权限。000三个分别表示读写执行权限,0时表示没有权限,1时表示拥有权限。cd表示进入某个文件,其中cd (文件夹名)表示进入该文件夹,cd ..表示回到上一层目录。查看文件(cat,tac,more,less,head,tail)

2023-07-17 11:38:24 85 1

原创 c语言第二课(基本语句,指针及数组)

里存的是a的地址 加*->*p 才表示a,不能直接用p。printf(“%s\n”,__FILE__): 显示当前所在文件名。|:或 1|1=1 1|0=1 0|0=0。^:异或 1^1=0 0^0=0 1^0=1。换位方法 a=a^b b=a^b a=a^b。

2023-07-17 09:10:00 49

原创 c语言第一课(数据类型,表达式及运算符)

替换类型 将int的职能复制给INT,与#define语句的区别是,执行时间不同,#define在预处理阶段就替换了,typedef在程序执行时才替换,替换的属性也不同,#define只是单纯的文本替换,而typedef是类型替换。同样定义三个类型,但后一种就少了8个字节的内存占用,因为char可以用int补齐时开辟的内存但如果double在中间的话int开辟的四个内存不够,就要重新开辟四个,对齐最大的类型,所以要开辟就一次要总共开辟八个,不管用不用的完,所以要注意排序顺序,来节约内存。

2023-07-17 09:08:56 88 1

原创 嵌入式开发概叙

嵌入式系统可以使用各种处理器架构(如ARM、MIPS等)和操作系统(如Linux、RTOS等),具有更强大的计算和处理能力,适用于更复杂的应用场景,如智能手机、汽车电子、工业控制等。因此,嵌入式系统需要针对资源限制进行优化和精简,以实现高效的性能和功耗平衡。2、为什么需要嵌入式:嵌入式系统的需求来源于特定的应用场景和任务要求,它具有资源限制、实时性要求,并与物联网和互联网连接相关。(4、物联网和互联网连接:随着物联网和互联网的发展,越来越多的设备需要与互联网进行连接和通信,以实现数据交换和远程控制。

2023-07-17 09:07:18 117 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除