自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 55.【C语言】字符函数和字符串函数(strstr函数)

翻译:函数或另一个版本返回指向第一次出现在字符串1里的字符串2的指针(即出现的位置),如果字符串1里没有字符串2,返回空指针这个匹配过程并不包括\0,但到此为止str1:要扫描的字符串str2:含要匹配的字符序列的字符串返回一个首次出现在字符串1里的字符串2的完整序列的指针,如果找不到字符序列,那么返回一个空指针在C语言中,该函数只能这样声明而不像在C++中有两种重载版本如果改成找不到返回空指针。

2024-09-17 13:06:13 336

原创 54.【C语言】 字符函数和字符串函数(strncpy,strncat,strncmp函数)

和strcpy,strcat,strcmp函数对应的是strncpy,strncat,strncmp函数。

2024-09-16 19:32:20 1099

原创 53.【C语言】 字符函数和字符串函数(strcmp函数)

strcmp:string compare 字符串比较。

2024-09-14 18:33:51 525

原创 汇编实现从1加到1000(《X86汇编语言 从实模式到保护模式(第2版》) 第135页第2题解答)

编写一段主引导扇区程序,计算从1加到1000的和,并在屏幕上显示结果。2.s3循环中,一定是保存完dx后再为dx清零。具体怎么将bin文件写入主引导扇区见此文。,否则新写入的数据会被覆盖!

2024-09-14 12:00:48 506

原创 52.【C语言】 字符函数和字符串函数(strcat函数)

1.格式:2.stcpy从目标空间的第一个\0开始追加,并且覆盖掉\03.追加的字符串stcat以第一个\0为结束标志,停止追加4.自己不能给自己追加。

2024-09-13 13:46:49 921

原创 51.【C语言】字符函数和字符串函数(strcpy函数)

讲解strcpy函数的简单使用 模拟实现 自制代码优化

2024-09-13 10:21:40 727

原创 ACC4.【C语言】正斜杠和反斜杠

注释://除号(取商):/

2024-09-12 14:11:39 488

原创 50.【C语言】字符函数和字符串函数(上)

讲解字符分类函数,字符转换函数,字符串函数(strlen)

2024-09-12 12:38:37 895

原创 MCU9.reg52.h的介绍

区别:优先搜索的位置不同!在keil软件中优先搜索软件安装的INC文件夹优先搜索当前工程文件夹下的头文件,如果没有,则在软件安装的INC文件夹下搜索头文件。

2024-09-11 09:20:03 424

原创 E32.【C语言 】练习:蓝桥杯题 懒羊羊字符串

现在,给定几个字符串 s1,s2,...,sn,每个字符串均由三个大写字母组成。请你统计其中有多少个字符串符合“懒羊羊”字符串的定义。第一行输入一个整数 n (1 < n ≤ 200),表示字符串的数量。接下来的 n 行,每行输入一个由三个大写字母组成的字符串,换句话说,“懒羊羊”字符串的形式应为 ABB,其中A和B是不同的字母。符合“懒羊羊”字符串定义的字符串只有 “STT”,因此答案为 1。输出一个整数,表示符合“懒羊羊”字符串定义的字符串总数。存储字符串就是将一个个的字符存储到一个个元素中。

2024-09-10 14:49:32 839

原创 MCU7.keil中build产生的hex文件解读

闲来无事,查看了的hex文件用FlexHex打开给我的第一印象是:经过软件的解释之后,发现这些数据排列地把解释后的数据当作十六进制来观察1.每一行数据均以冒号:开头2.行与行之间的数据长度不同看每行第1,2个数字02H(十六进制)=02D(十进制),03H=03D,0CH=12D,00H=00D第1行比第2行少1个字节(03D-02D=第2行比第3行少9个字节(12D-03D=第4行比第1行少2个字节(02D-00D=发现两行数据的长度的差值恰好对应两行的第1,2个数字相减的值。

2024-09-09 10:52:49 584

原创 MCU6.用keil新建项目

51单片机用keil4新建项目并编译

2024-09-09 09:10:18 370

原创 MCU5.51单片机的最小系统

晶振电路(时钟),复位电路,电源电路(控制电压,保持稳定),下载电路(外加的,用于烧录程序)烧录:通过下载电路,把程序下载到单片机中用于运行。

2024-09-07 17:45:43 447

原创 MCU4.逻辑门电路的符号

C语言符号:&(按位与)和&&(逻辑与)逻辑门电路的符号:符号:|(按位或)和||(逻辑或)逻辑门电路的符号:C语言符号:!(按位非)逻辑门电路的符号:相同为真(0⊙0=1,1⊙1=1),否则为假(0⊙1=0,1⊙0=0)符号:⊙(按位同或)图片:C语言符号:⊕(按位异或)逻辑门电路的符号:之前C语言的专栏讲过,0为假非0为真,对应在数字电路中,0代表逻辑电平0(低电平),1代表逻辑电平1(高电平)

2024-09-07 16:45:53 284

原创 汇编语言在虚拟机中输出“Hello World!”

02.编译后的bin文件用Fixvhdw64.exe。Nasmide64.exe(李忠老师编写)Fixvhdw64.exe(李忠老师编写)VirtualBox虚拟机(免费 开源)注意vhd文件大小一定设置成固定的。

2024-09-05 17:53:15 492

原创 E32.【C语言】练习:指针运算习题集(下)(未完)

求下列代码的执行结果答案速查:分析:这条代码不是把三个字符串放入a中,而是a指针数组中存放着的地址指向字符串的work首字母w的第一个字节,at首字母a的第一个字节alibaba首字母a的第一个字节VS2022打开内存输入&a发现存放的地址0x009a7bcc,0x009a7bd4,0x009a7bd8是连续的,对应三个字符串的首字母的地址转到地址0x009a7bcc每一个字符串的结尾都跟着\0pa的类型是char**,是二级指针(潜台词:二级指针指向一级指针。

2024-09-04 19:05:51 429 2

原创 E31.【C语言】练习:指针运算习题集(上)

指针运算习题集 Exercise 1~Exercise 5

2024-09-04 12:30:16 1140

原创 49.【C语言】解释“数组和指针”容易混淆的地方

arr1的类型在int[5]的基础上加个*,即。上方代码运行是否有错误?写的内容是否规范呢?定义了一个名为arr1的数组,其类型为。定义了一个名为arr2的数组,其类型为。定义了一个名为arr4的数组,其类型为。编译器认为p2是数组其包含5个元素(从int(*)[5]推过来。

2024-09-03 10:33:19 468

原创 MarkDown 基础语法

轻量级标记语言,比word方便操作且语法简单,文件以md为后缀名常见于github.com仓库上的readme.md。

2024-09-02 17:37:03 536

原创 MCU3.电平等一些名词

计算机由各种硬件组成,只认识0和1,可以通过改变电压来向计算机输入数据(0和1)例如:最大电压为3.3V电压范围是0~3.3V,可以定义0~1V较低的电压表示0,定义2~3.3V较高的电压表示1现在定义:低电平(low level):0~1V 高电平(high level):2~3.3V如CPU要输出100这个十进制数字,其内部操作为:先把12345转换为二进制数,再把二进制数转换为一系列高低电平。

2024-09-01 16:22:22 282

原创 MCU2.认识51单片机开发板的各个模块

Analog-to-Digital Converter 模拟信号转数字信号。Digital-to-Analog Converter 数字信号转模拟信号。顾名思义,可以精确控制旋转角度的电机。是插针用于连接外部电路。

2024-09-01 14:56:20 315

原创 MCU1.51单片机介绍

2--表示该芯片内部程序存储(FLASH)空间大小,1 为4KB,2 为8KB,3 为2612KB,即该数乘以4KB 就是芯片内部的程序存储空间大小。一般来说,程序存储空间越大,芯片价格也越高,所以我们再选择芯片的时候要根据自己需求选择合适芯片。9--表示内部含有Flash EEPROM 存储器,还有如80C51 中0 表内部含有MaskROM(掩模ROM)存储器;40--表示芯片外部晶振最高可接入40MHz。I--工业级产品级别,表示芯片使用温度范围。8--表示该芯片为8051 内核芯片。

2024-08-31 18:10:59 1157

原创 Cheat Engine查找到的DOSBox的缓冲区

在查找DOSBox debug中的ax时,意外发现了输入缓冲区(见视频)

2024-08-29 19:10:57 158

原创 ★♛★指针(重难点)合集

格式 数据类型指针变量名称=&变量名称;//指针变量:存放指针(地址)的变量指针常量:具体的地址 如0x00F85580(*不可以省略)这个*是解应用操作符,数据类型* 表示专门存储地址==专门存储指针,“数据类型*”称为指针变量的类型理解char*的含义:拆成两部分*:说明pch是指针变量char:说明pch指向的对象ch是char类型的所以建议命名指针变量的格式为“p+指针类型的首字母”3.介绍解引用操作符(*)只要拿到了地址(指针),就可以通过地址(指针)找到地址(指针)指向的对象。

2024-08-29 14:59:18 916

原创 E30.【C语言】练习:sizeof和strlen的习题集(B)

arr[0]是取首元素的地址,+1第二个元素的地址,因此。p是一个指针变量,也就是求指针变量的存储空间,结果为4/8。&arr是取整个数组的地址,+1跳过整个数组,但仍然是。,结果为7(一个字符占一个字节)arr+0代表首元素的地址,因此。&arr是取整个数组的地址,因此。,又因为char类型,结果为1。arr[1]是第二个元素,因此。,又因为char类型,结果为1。4/8含义:4或8个字节。*arr是首元素,因此。x86环境:4个字节。x64环境:8个字节。

2024-08-29 10:56:40 468

原创 E29.【C语言】练习:sizeof和strlen的习题集(A)

细节部分:由strlen的声明和定义知,strlen接收的是const char* str,而arr代表char(*)[6],因此会发生强制类型转换。a+0代表数组的首元素地址+1,+1跳过4个字节,为第2个元素的地址,因此。注意这里的sizeof(a+0);a是数组名,是数组首元素的地址,*a解引用为数组首元素,因此。&a为取a的地址(整个数组的地址),地址+1还是地址,因此。&arr是数组的地址,也是数组开始位置的编号,strlen。arr是首元素的地址,+0还是首元素的地址,strlen。

2024-08-29 09:51:51 924

原创 48.【C语言】结构体补充

原因:结构体与一般的数组不一样,当结构体中的数组比较大时(int arr[9999] )在传值时会复制一份一样的int arr[9999],占用大量空间,降低效率;s为arr和n赋值,arr的前5个元素分别赋值为1,2,3,4,5,其余默认为0,n赋值为100。传参时function(int a)中int是变量类型,a是变量名。定义结构体S中的两个结构体成员,分别为arr整型数组和整型变量n。中int是变量类型,a是变量名,0是变量值。struct S s:S代表结构布局,s代表结构变量。

2024-08-27 20:29:36 779

原创 47.【C语言】指针(重难点)(J)

/由于数组的元素是连续排列的,因此需要知道每个元素具体占多少字节来访问每个元素,可以在base的基础上+j*width来移动,因此base是void*型,要强制类型转换为。> p1和p2为需要比较的两个元素,由于不知道元素是什么类型,因此写void*,又要确保稳定,用const修饰。元素1位置=base+j*width 元素2位置=base+(j+1)*width。> base指针存放第一个元素的地址,由于不知道元素是什么类型,因此写void*写过一个排序函数,可以将此自制一个类似qsort的函数。

2024-08-26 10:23:44 478

原创 46.【C语言】指针(重难点)(I)

时,被调用的函数就是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。★2.void*类型的指针不能解引用操作符,也不能+/-整数的操作,这种指针变量一般是用来存放地址的,使用之前要。base:指向在需要被排序数组中的第一个元素,转换为void*型(即base存放第一个元素的地址)如果把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数。返回值

2024-08-24 10:33:04 1009

原创 45.5【C语言】typedef

signed long long被简写为k这个别名,之后可用k直接定义变量,简化输入。但用typedef将int*重定义为ptr后,p3和p4类型均为int*禁止写成typedef int(*)(int,int) ptr!禁止写成 typedef int(*)[10] ptr!改函数有两个类型均为int的参数,且返回类型也是int。由于int*中*优先结合p1,导致p1,p2的类型不同。把int(*)[10]数组指针简写为ptr。把int*指针类型简写为ptr。必须要求简化名称在*旁边。

2024-08-21 11:07:40 520

原创 45.【C语言】指针(重难点)(H)

的内容是int和void(*)(int),第一个参数是int,第二个参数是void(*)(int) 即函数指针类型(该指针指向的函数:返回void,参数int)在void(*)()前加*是解引用(调用0地址处的函数)最后在(*(void (*)())0)后加()表示无参可传(这个函数没有参数)……)0,括号内是void(*)()即函数指针类型,0作为函数的地址,这个函数没有参数,返回类型void。格式 函数的返回类型 (*指针变量的名称)(该函数的参数1,该函数的参数2,该函数的参数3。

2024-08-21 08:56:31 1318

原创 44.【C语言】指针(重难点)(G)

]的优先级要高于*号的,所以必须加上()来保证p先和*结合,表明p2是指向数组的指针变量(即数组指针变量),也就是定义p3的写法。显然p1是整型指针,p3是数组指针(指向含5个int元素的数组的指针),p4是数组指针(指向含5个int*指针的数组的指针)虽然两个数组的内容一样,但是abc字符串创建了两次,str1和str2存储的数组的首元素的地址不一样,所以not same。arr数组是一段连续的空间,数组的内容是可以变的,所以常量字符串(char* pc =*像数组一样指定访问常量字符串的字符。

2024-08-16 16:54:43 1304

原创 43.【C语言】指针(重难点)(F)

上方代码并没有创建二维数组,但是却依靠指针数组模拟出二维数组,可以按照二维数组的形式(arr[i][j])来访问。bc f8 8f 00 --倒着写-->00 8f f8 bc-->008ff8bc-->是&pa的结果。命名的含义:ppa-->point pa-->point (point pa)c8 f8 8f 00--倒着写-->00 8f f8 c8-->是&a的结果。01 00 00 00--倒着写-->00 00 00 01-->是变量a的值。n级指针是指向(存储)(n-1)级指针地址的指针。

2024-08-13 17:16:31 935

原创 42.【C语言】冒泡排序

回想标志寄存器(flag register)的概念:标志寄存器用于存储状态信息,这些状态信息可以。如 输入 9 0 1 2 3 4 5 6 7 8 一趟冒泡排序后就已经完成任务了,但。9+8+7+6+5+4+3+2+1=(1+9)*9/2=45步。输出:0 1 2 3 4 5 6 7 8 9。:有顺序时取消交换,提前退出循环,输出结果。对于上方的代码,当有10个元素时,来控制趟数(i)和步数(j)冒泡排序需要(N-1)步。冒泡排序需要(N-1)步。冒泡排序需要(N-2)步。冒泡排序需要(N-3)步。

2024-08-13 15:52:12 617 1

原创 41.【C语言之外】聊聊Cheat Engine官方教程步骤6的思考

如果你要关掉它,那么要记好方栝号中间的代码)并做一次 4 字节的扫描,扫描"详细信息"窗口中告诉你的一串十六进制数值。回到教程,点击"确定"这个地址便会加到 CE 主窗口下方的地址列表中,如果没做错,在地址栏将显示 P->xxxxxxxx,而 xxxxxxxx 和你扫描到的地址数值是一致的,如果不一致,那么可能是哪里出错了。"添加地址"窗口将发生变化,多出了"Address of Pointer(指针地址)"和"Offset (Hex)(偏移量(16进制))"的文本框,以便您键入一个指针的地址和偏移量。

2024-08-10 15:05:30 1192

原创 40.【C语言】指针(重难点)(E)

则有*(pi+i)==*(i+pi)==*(arr+i)==*(i+arr)==arr[i]==i[arr]==p[i]==i[p]一个大胆的猜想:arr[i]==i[arr],执行后结果正确(无论哪种写法都会转换为*(arr+i),[]只是操作符):sz2=sizeof(arr)/sizeof(arr[0]),sz2==1,即sizeof(arr)==1。1.sizeof(数组名):这里的数组名表示整个数组,计算的是整个数组的大小,单位是字节。总结:1.数组传参本质上是传递的是数组首元素的地址。

2024-08-10 10:49:37 785

原创 E28.【C语言】练习:字符左旋

实现一个函数,可以左旋字符串中的k个字符。ABCD左旋一个字符得到BCDA。ABCD左旋两个字符得到CDAB。

2024-08-08 17:37:57 314

原创 39.【C语言】指针(重难点)(D)

可以提高程序的运行效率,尽管assert(表达式)为假,但不会报错,继续执行,注意:*(p++) = i;先使用,后++ --> *p = i;分析:test函数定义的n的生命周期介于test函数的 { 与 } 之间,*指针变量不再使用时,及时置NULL,指针使用之前检查有效性。:报错是会在窗口显示没有通过的表达式,以及包含这个表达式的文件名和行号。:在运行时确保程序符合指定条件,如果不符合,就报错终止运行。:指针指向的位置是不可知(随机的、没有明确限制的),如果不知道指针应该指向哪里,给指针赋值。

2024-08-08 11:10:26 950

原创 38.【C语言】指针(重难点)(C)

因为有const修饰,编译器在语法上不允许修改这个变量;但显然已经违反常变量的语法规则,需要限制指针的行动-->const修饰指针变量。总结:当两个指针指向同一个空间时,(指针-指针)的绝对值==指针之间的元素个数。指针指向的内容不能能通过指针来改变,且是指针变量本身的值是不可改。指针指向的内容不能通过指针来改变,但是指针变量本身的值是可以改。指针指向的内容能通过指针来改变,但是指针变量本身的值是不可改。错误 pi=&n;正确 pi=&n;1.const 放在*的左边。

2024-08-07 18:54:57 1366

原创 【8086汇编】《汇编语言》王爽著 实验4第二问 解答

(2)编程,向内存0:200~0:23 F 依次传送数据0~63(3FH),程序中只能使用9条指令,9条指令中包括" mov ax ,4c00h"和" int 21h"。(1)编程,向内存0:200~0:23 F 依次传送数据0~63(3FH)从0~63 一共63-0+1=64次-->循环64次。

2024-08-07 14:56:30 166

汇编实现从1加到1000的bin文件

这是汇编实现从1加到1000文章的配套资源,bin文件写入主引导扇区后可在VirtualBox上运行

2024-09-14

汇编语言在虚拟机中输出“Hello World!”的bin文件

bin文件

2024-09-05

VS 2022的float.h

float.h详细内容

2024-07-15

VS 2022的limits.h

limits.h详细内容

2024-07-15

空空如也

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

TA关注的人

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