自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 linuxday05

可以使用反斜杠 \ 调整格式换行。

2024-04-09 19:27:06 934

原创 指针数组复习

++p,*(++p) 表达式的值为*(p+1),副作用p自增;++*p,++(*p) 表达式的值为*p+1,副作用*p自增;(*p)++ 表达式的值为*p,副作用*p自增;指针的好处,值传递不够改变实参的值,而通过传递实参的地址,可以通过指针改变实参的值;1、指针的算数运算,当指针指向数组元素时,可以通过指针的算术运算访问数组的其他元素;*p++,*(P++) 表达式的值*p,副作用p自增;两个指针相减(指针的比较运算,两个数组指向同一数组元素)

2024-03-05 15:59:25 244

原创 51单片机学习day02

基于普中的stc89c52,

2024-03-02 16:06:23 576

原创 linux_day04

进入循环断点时,gdb会进入这个断点循环次数,所以需要用到忽略这个断点若干次多次命中循环体中的断点。

2024-03-01 21:03:36 1590

原创 ROS机器人入门

本文基于一些关于ros学习资料,对ros学习的一些笔记进行整理记录

2023-12-18 20:54:40 1418 1

原创 51单片机开发——day01

内部集成了cpu,RAM,ROM,定时器,中断系统,通讯接口,用于信息采集处理硬件设备控制;8051内核所以带了这个内核的单片机都叫51单片机(是所有兼容8031指令系统的单片机统称);

2023-12-04 21:10:05 1896

原创 c primer plus_chapter_four——字符串和格式化输入/输出

0 数值格式:用0代替空格填充字段宽度,整数格式:有- 或指定 精度,则忽略该标记,”%010d" ,,"%0.83f"%G 根据值不同,自动选择%f、%E、%E格式用于指数小于-4或者大于或等于精度时。#define a 1 //程序中所有的a都被替换成1;//40表示元素数量,char表示访问类型;

2023-11-12 21:18:06 122

原创 linux_day03

遇到虚拟机异常退出,会生成配置文件,不确定文件以后是不是还要用的情况下,先改文件名,再启动虚拟机;

2023-11-12 21:14:32 250

原创 linux_day02

一个点表示当前工作目录,两个点表示上一层工作目录;目录的本质:文件(该文件储存目录项,以链表的形式链接,每个结点都是目录项,创建文件相当于把目录项添加到链表中)如果想在一个目录中添加或者删除目录项,需要获取这个目录的写权限;软连接:符号链接,单独的文件里面存储了文件路径,类似于指针,指向目录;硬链接:文件以链表形式存于物理文件系统,虚拟文件系统(VFS)与物理文件系统存在一种映射,上图he目录和点目录指向同一个文件,这种映射情形叫硬链接;

2023-11-11 19:21:35 632

原创 linux-day01

内核(kernel):(管理硬件资源(cpu,内存,外部设备),文件管理,内存管理,进程调度,网络通信,硬件驱动;为上层应用软件提供一个运行环境;系统调用(system calls):内核对上层应用程序提供的接口;库函数(library routines);对系统调用进行包装(方便程序员使用);shell:(命令解析器,shell本质是一个程序,解析命令,执行命令,执行脚本(script,命令的集合))上层应用程序可以通过shell,shell访问内核完成调用;

2023-11-05 17:57:17 177 1

原创 c语言经典算法—二分查找,冒泡,选择,插入,归并,快排,堆排

工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后再从剩余未排序中继续寻找最小(大)元素,然后放到已排序序列的末尾,以此类推,直到所有元素均排序完毕;交换次数:((n-1)+(n-2)+...+1 = (n(n-1))/2)原数组逆序(比较次数,(n-1)+(n-2)+...+1 = (n(n-1))/2);(比较次数:大于交换的次数,小于(n(n-1))/2)最坏情况原数组逆序(比较次数(n-1)+(n-2)+...+1 = (n(n-1))/2)

2023-11-04 12:16:48 592

原创 编译器项目————只实现到文法分析

2、运算:ADD,SUB,MUL(乘),DIV(除),MOD(取模)//,OR(或),xOR(异或),AND(与),SHL(左移),SHR(右移),IQ(等),NE(不等),LT(小于),LE(小于等于),GT(大于),GE(大于等于)以0为起始状态,通过getchar----(i)--》假设进入标识符状态,继续读n,读t,认为是标识符,遇到空格结束回到状态0,遇到等号进入赋值状态,再遇到等号进入等号状态,空格回到状态0;语义(semantic):语法背后实际的含义;以乘法表达式的规则进行匹配;

2023-10-19 18:21:42 61

原创 c语言文件处理,错误处理

在读和写的过程中我们希望读和写是同时进行的,但是只用“wb”加fwrite读写入(序列化)加上“rb”和fread(反序列化)这样涉及到 操作系统从内核态转化到用户态的变化,导致硬件应用不合理,所以使用“wb+”进行读写,但是因为序列化已经到文件的末尾了,此时的指针指向的是字符流的末尾,反序列化的时候要思考怎么把指针移到字符流的起始位置,这就需要用到文件定位;"A"-------append,追加(不要求文件存在,如果文件存在,不会清空原文件的内容)不同操作系统表示换行不同,Linux----'\n';

2023-10-13 13:13:16 42

原创 c语言复习_1

指针可以作为数组长度:在C和C++中,如果我们有一个指针"p"指向数组的第一个元素,并且我们知道数组中元素的类型大小,那么我们可以通过计算"p + n"来获取数组的第n个元素,其中n是数组长度。(2):根据索引查找值,(O(n),平均遍历n/4个元素,单链表平均遍历n/2)//双链表记录索引值,比中间值大就逆序遍历,小则顺序遍历;先比较两个链表的第一个元素确定第一个位置,再把第二个元素和另一个链表的下一个元素或者本结点的下一个元素比较,当一个链表结束后直接在尾结点接入另一个链表剩下的元素;

2023-10-08 20:00:46 99

原创 c语言经典面试题

传统上,主函数定义了一个int空间,子函数就必须接收一个int * 的变量,通过这个变量,反向更新,将主函数中的int空间的值进行修改;int a[3][4] = {1,2,3.....}//二维数组看后面那个来操作空间,a是4个int4个int地访问地址;那么,如果子函数中想更新一个int * 的值,必须传递一个int * * 的变量来达到同样的效果;&a + 1,是一个数组一个数组加,指针的地址会到a数组后面,(*p)[4]//存的是地址,4个int4个int地访问地址;

2023-09-05 20:52:55 32

原创 c语言的函数上设计思想

第九行可能打印出不是hello world的信息,常量字符串 赋值给局部变量数组,函数返回局部变量消失,常量字符串依然存在,用等号给空地址赋值,虽然该地址可以赋值给str,但是该地址已经随着函数返回而成为随机地址,里面存的值已经不确定了;*a =200//下级函数a中存的是上级函数中a的地址,而*a直接通过该地址访问到了上级的a,通过赋值改变上级函数中a的值;p是局部变量,第三行用malloc申请的堆空间的值为局部变量赋值,函数返回后局部变量消失,而堆空间未消失,没有回收导致了内存泄漏;

2023-09-03 20:48:34 37

原创 Makefile

makefile中:rm *.o test;表示移除makefile中所有.o文件和test;利用命令行由依赖文件生产可执行文件,命令行前必须是TAB键;export :把变量传递给子目录的makefile;$(SUBDIRS):执行指定目录下的makefile;make命令的选项及makefile中的隐含规则;创建和使用变量://用变量来代替一个文本字符串;make -i 忽略错误;CHECK_DIR:生成BIN目录;生成文件必须和依赖文件之一相同;不能变量套变量,不然会死循环;@ECHO:打印不提示;

2023-08-28 21:03:14 27

原创 linux c语言高级编程

p指针没有初始化,是一个野指针,在内存中是一个随机的值,所以不能赋值,否则非法访问空间出现段错误;堆内存的分配与释放:*malloc(开辟size大小的空间并返回地址)/free;b num(行号);info b (查看断点);编译器根据条件的真假决定是否编译相关代码;//释放p中存的地址对应的空间;恢复执行,退出一行一行执行模式,一次执行完;来访问结构体指针的成员;

2023-08-28 16:58:12 44

原创 linux c语言函数

/运用三个指针,一个记录起始地址,一个存链接后的字符串,一个把自身字符串给存链接的那个字符串;数据类型(函数指针所指向的函数的返回值类型)(*函数指针名称)(参数(与所指向的函数的形参保持一致));数据类型(返回值类型) 函数名称 (参数,参数){语句序列;(2)a.删除一个字符串的空格(运用两个指针,一个处理一个赋值);(1) 数据类型 * 函数名称(参数说明){};//qsort();int add(int a,int b){}//函数。

2023-08-28 13:58:00 60

原创 linux下c语言的输入输出

/从键盘输入以回车结束的字符串放入字符;//加了数字该函数会自己拆格式;注意:整数输入时空格,table,回车不会被识别;而字符输入会识别,因为ascll码;从键盘读取一个字符,结束输入(ctrl d)或错误返回-1;可以利用循环一个字符一个字符输入;gets不能以空格作为输入结束标志;输入的时候也要写abc加数字;参数:c为字符常量,变量,或表达式;输出字符串,自动换行;scanf("格式字符串",地址表);

2023-08-26 21:28:17 451

原创 Linux下c语言的数据类型、常量、变量及运算符

gcc -E main.c -o main.i //打开i文件可以看到头文件的位置以及头文件中的数据类型处理文件的方式,可以借此查看头文件的编译方式,尝试自己写原生头文件;register称为寄存器类型(>(右移)、

2023-08-26 16:46:48 111

原创 c语言内存分段管理

//int * *p中,int* 存了a的地址,*p存了a的指针变量里存的地址;栈内不仅保存了函数的局部变量,也保存了函数的返回信息,如果越界访问并修改这些空间就会出现段错误(函数回调上一个函数会有一个保护现场的地址指针);//(int *相当于函数返回值)来修改上级函数的值,在不同函数里定义相同的名称的局部变量,用了static后会升级其生命周期,并且不会冲突,在编译的时候会给这两个相同的变量不同的标识符;

2023-08-25 17:57:24 47

原创 linux命令和c语言基础

cp :复制 //cp a.c b.c //// cp a.c ../bank.c';查找:/ 查找的字符串 n:继续查找往下;:w file 把当前文件另存为别的文件名;9、交互: :w(保存)name.格式;:范围(省略为当前行)s/str1/str2 当前行替换没有g则默认替换第一个;:,(当前行)$(结尾)s/str1/str2/g(g代表符合的全部替换)

2023-08-24 22:15:09 31

原创 c primer plus_Chapter_There数据和c

存在一个指数部分是最小值,即全部可用位来表示最小尾数值,(该数字是float类型能用的全部精度表示的最小值),现在把它除以二,通常会减小指数部分,但指数已经是最小值,计算机只能把尾数部分右移,空出一个二进制位,丢弃最后一个二进制数,例如0.1234E-10除以10,得到的结果是0.0123E-10。printf的缓冲区,当缓冲区(buffer)满,遇到换行字符或需要输入的时候,就可以把缓冲区的内容发送到屏幕,(该行为叫刷新缓冲区),旧式编译器遇到scanf不会刷新缓冲区,可以利用换行符来刷新;

2023-08-21 14:02:28 46

原创 c primer plus_ChapterTwo

设计程序:定义3个变量,用scanf接收,设计一个转化函数,获取当前时间戳,利用tm结构体,遍历每一年判断润,平年,减去输入的day,加上今年目前的nday,累加之前的day即可;4、main(函数名),int,function(函数),char,=(运算符)哪些是c语言的关键字?1、printf ("a%d\n")//a为实际参数;程序目标:接收输入的日期并输出到今天的天数;5、编写一个程序把你的年龄换算成天数?形式参数:函数中用于储值的变量;实际参数:传递给函数的特定值;违反了组成语句或程序的规则;

2023-08-11 22:28:25 32

原创 c primer plus note_chapterOne

6、编译器把源代码文件转化为中间代码,链接器把中间代码和其它代码合并,把结果放在目标代码文件中(此时不能之间运行),目标文件代码缺失启动代码(startup code,启动代码是程序和操作系统之间的接口),可以在MS windows或linux系统下运行IBM PC兼容机。目标代码还缺少函数库,所以链接器是把编写的目标代码,系统标准启动码和库代码合成一个文件,即可执行文件;//clang这一点的用法和GCC相同;定义程序目标,设计程序,编写程序,编译程序,运行程序,测试和调试程序,维护和修改程序;

2023-08-11 11:57:06 35

原创 计算器案例c语言

char *p[10]:数组,以一个指针变量为对象,并以10个该对象组成的数组,p在64位操作系统中占80byte;char(*p1)[10]:p1存了一个地址,以十个char来操作这个地址,p1在64位中占8byte;s:数组,10个元素,每个是地址,大小 指向空间怎么操作;(int)函数的方式来操作,输入参数是int,返回值int;每个地址是指向函数的地址;函数地址 int void。signal :函数名:输入:1 int 2 函数地址(输入为int,返回值为void的函数)

2023-08-06 19:43:35 34

原创 c语言函数库

6、strstr(const char *haystack,const char *needle)在haystack中茶查找一次needle的位置,不包括终止符'\0';char data[5] sizeof(data){在关键字sizeof中传递的是数组标识},在函数中data只传首地址;2、给一个二维数组int data[3][4],用一个指针变量来保存数组名;//三行四列,data + 1和data之间是加了4个int;只表示接收到了一个地址的值而已,便于子函数接收主函数传递的空间;

2023-08-06 13:50:48 23

原创 C语言二维指针

所有指针,都可以理解为指向一片连续空间,只是这个连续的空间,究竟时几个(1-N),约定个数(数组),约定结束标志(NULL);c语言种main的参数传递,int argc,char *argv[];指针本意:一个地址的描述,描述了地址指向空间的访问方式;存储的是一个地址,这个地址可以无穷的访问,访问多少具体看指向空间的属性决定;把物理地址放到连续逻辑地址上再用一个指针来指向该连续的逻辑地址;p[10]//寻址方式;1、二维指针的逻辑意义。2、多维数组的逻辑意义。

2023-07-31 21:31:28 64

原创 C语言指针

申请5个char的基本类型,用data数组名来标记这五个类型的首地址,data的值无法标记5个空间,data的值仅仅是一个标签,不占用空间;char *p2="abc",常量空间中abc不会单独开辟,只是多开了一个p2,p2存入的是abc的首地址,p1==p2;//指针变量,保存地址的容器,大小和计算机操作系统位数有关,值是可以变的,指针的地址不可以变;//const 只读的,一个char一个char的走,是一个字符串;这个容器的名称(标识),在哪(地址),存什么(值),干什么(类型);

2023-07-25 21:13:42 22

原创 c语言的字符空间

char *strcpy(char *dest//目标地址,const *src//源地址){漏洞心脏流血 strcpy函数漏洞;如果源码超过目标函数导致内存越写;工程中不能用strcpy;字符空间:常量行为:字符串;要存东西先考虑是不是字符空间;}//strcpy的内部结构;字符空间,只要是字符空间就一定有一个结束标志0;减一拷贝的时候留一个空间来加0;1、数组无法是实现越界检测;dest多不担心越界问题;printf(%s,a)字符输出;涉及到写入空间的,建议加上个数;strlen 的函数内部结构;

2023-07-25 12:00:36 41

原创 c语言数组空间

没有专门的空间来存data,data的值只是一个标签,不占用内存空间。//有些不提供该函数,无库函数支撑;2、假设设计了一个0x20008000的地址位置上,向这个位置填入0x12345678的值;char修饰访问空间一个字节一个字节访问,*p存地址标识*p的大小取决于操作系统位数;申请5个char的基本类型,用data数组名来标记第一个元素的首地址;函数的参数传递行为:函数的数组空间传递,只能传递首地址;2、地址访问行为:一个数组一个数组的访问;1、对数组名获取他的地址,值还是数组空间首地址的值;

2023-07-24 20:08:16 114

原创 c语言内存地址

地址[n] 以地址的值作为首地址,偏移n个单位位置,访问里面对应的值;地址的访问,拿到这个地址,取出地址的值,用这个值去访问对应的空间;*地址 以地址的值作为首地址,偏移0个位置,访问里面对应的值;这个地址的运算操作特殊(访问时安照对象大小进行的);&变量名 通过查表,把变量名对应的地址取出来;用*的标点符号,把变量名升级为地址类型;2、通过一个绝对的地址访问同样的内存;地址 + 1 =地址值 =1个单位;用多大容量的区域来保存这个地址的值;只要使用地址要考虑这个地址的范围;

2023-07-24 12:19:59 489

原创 水仙花数c语言

水仙花数指一个三位数,它每个位上的数字的3次幂之和等于它本身。1、三位水仙花数4个:153,370,371,407;数据类型,结构体,共用体,大驼峰命名法。函数里的局部变量:下划线法定义;函数名,小驼峰命名;2、c语言命名规则:参考。

2023-07-24 00:12:31 44

原创 猜数字游戏

4、浮点数中float类型变量i与零比较的语句(原则上不能进行直接相等的比较,采用范围比较,范围逼近);s = “123”(把123的首地址赋值给s);第二种,不管文件编码行为,在编译时,生成可执行文件的时候,告知编译,将可执行文件的编码设置为一致。gcc -o build xxx.c build的可执行文件和源文件的中文编码一致;“”双引号是空间首地址,内存中有一段只读的区域,作为空间首地址,保证程序输出终端的解码行为和可执行文件里保存的中文编码是一致的;第一种,源文件的中文编码和终端解码一致;

2023-07-23 16:11:54 26

原创 算数运算&位运算&逻辑运算

0x8000000表示的是一个32位二进制数,转换为二进制为10000000000000000000000000000000。左移一次,相当于*2(1000 0000 *2会溢出导致结果为0)无符号数的移动空位填0,有符号的移动右移空位为符号位;先后关系的要求:A为真,B才执行,A为假,B不执行;如果是无符号数,除法结果变为正数;右移的空位,根据这段内存中是否有符号;交换两个数:a=a^b;当原始数据比较大的时候,可以分块进行加密解密;A || B:A真,B不执行;乘除注意范围,无符号和有符号;

2023-07-19 21:52:05 184

原创 c语言数字字符编码

数字(\101八进制数字,数字只能0-7);'ascll码中的符号',‘1’,‘a',ascll(1b 0-255 低127个状态[0-6bit]给了8bit只用了7bit)字符减去‘0’,可以得数字,因为在ascll表中数字字符是连续排列的;0x20 --0x7f 可见字符,用%c看得见,//char a = 32/' '/0x20;大写字母在小写字母前面,大写字符小于小写字符,排序中,从小到大,大写字符在前,优先级高;(解决中文乱码bug,windows是国标码,Linux用的是utf-8)

2023-07-19 19:13:48 563

原创 结构体与共用体详解

unsigned int b1:4(分配空间4位)这个语法,可以控制寄存器位的数据;在原子类型基础上,若能将更多的类型打包成一个类型,那么访问和程序设计时,将会更容易,根据打包形势分成结构体(struct)和共用体(union)。c语言提供数组的概念来封装具有多个相同数据类型的空间,但是c语言不承认有数组类型。(默认规则)结构体 为了提高内存访问效率,在软件编译时,会引入字节对齐的规则;共用体内存共用,先定义的会被后定义的覆盖;1、结构体中最大的基本数据类型作为对齐标准;三、共用体封装方式,访问方法;

2023-07-18 19:15:52 81 1

原创 结构体与共用体封装方式

告知编译器,有一个新的类型(新的容器)不占空间;为了能够访问多个类型组合的空间,使得其局部传递性,拷贝性,自定义封装类型,从封装的行为上,分为两种行为,结构体,共同体;定义一个叫做len_t的int类型的别名;1、数组(相同数据类型的组合)在c语言中称之为概念,不认为是类型,不具备传递性,拷贝性;共用体:union 包名 变量名(共用体共用空间的基地址,大小是成员的最大值);定义一个叫做len_t的int类型的变量;结构体包:先定义类型再分配空间,最后使用;typedef 语法:(类型别名)

2023-07-13 20:51:18 90 1

原创 Linux server

软件安装:软件源仓库的更新:sudo(提权命令) apt(提apt的权,软件仓库命令) update(更新);9、交互: :w(保存)name.格式;lo节点:回环接口;键盘:编辑模式or 命令交互模式;默认打开命令交互模式;8、nG跳转到第几行;7、R替换模式 一直替换;window ping Server 的ipv4;6、一个字母替换:r(x);3、cd 进入家目录‘’‘’‘’‘’‘删除文件:rm -i (询问删除);rm -r /test(删除目录);LINUX常用命令;

2023-07-11 23:09:54 72

空空如也

空空如也

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

TA关注的人

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