自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 (五)C语言的指针与数组

1.指针赋值字符串:使用指针时,实际上是将指针指向字符串常量的首地址,字符串常量存储在只读的数据段,不能通过指针修改字符串的内容。2.数组赋值字符串:使用字符数组时,会在栈上分配足够的空间来存储字符串的内容,并在数组的末尾添加 null 字符 (‘\0’),可以通过数组进行字符串的读写操作,因为它在栈上分配了一块可读写的内存空间。总体而言,使用指针赋值字符串时,指针指向字符串常量,不能修改字符串内容。而使用字符数组赋值字符串时,数组在栈上分配一块内存,可以进行读写操作。

2024-07-24 00:48:52 212

原创 (四)C语言的函数

(1) 操作对象不同,strcpy 的两个操作对象均为字符串,sprintf 的操作源对象可以是多种数据类型,目的操作对象是字符串,memcpy 的两个对象就是两个任意可操作的内存地址,并不限于何种数据类型。(3) 实现功能不同,strcpy 主要实现字符串变量间的拷贝,sprintf 主要实现其他数据类型格式到字符串的转化,memcpy 主要是内存块间的拷贝。说明:strcpy、sprintf 与 memcpy 都可以实现拷贝的功能,但是针对的对象不同,根据实际需求,来选择合适的函数实现拷贝功能。

2024-07-24 00:35:21 298

原创 (三)C语言的变量与常量

1.使用#define宏定义:#define LENGTH = 102.使用const关键字:const int LENGTH = 10 或 int const LENGTH = 103.使用枚举:enum { PI = 3.14159 };这些方法之间的主要区别在于安全性和作用域。使用#define的常量没有类型,而使用const关键字的常量是有类型的。使用const是更安全和推荐的做法,因为它提供了类型检查,而#define则可能导致潜在的错误。

2024-07-24 00:08:13 260

原创 (二)C语言的内存管理

回答这个问题前需要知道malloc的作用和原理,应用程序通过malloc函数可以向程序的虚拟空间,申请一块虚拟地址空间,与物理内存没有直接关系,得到的是在虚拟地址空间中的地址,之后程序运行所提供的物理内存是由操作系统完成的。栈的分配和释放是由编译器隐式完成的,遵循后进先出(LIFO)的原则。C语言中,已初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。4.栈区是先进后出原则,即先进去的被堵在屋里的最里面,后进去的在门口,释放的时候门口的先出去。

2024-07-23 23:53:52 665

原创 (一)C语言的关键字

volatile 是一个在 C 语言中用于声明变量的关键字,它告诉编译器该变量的值可能在程序执行期间被外部因素更改,因此编译器不应该对该变量的访问进行优化。(1)中断服务程序中的共享变量: 当一个变量同时被中断服务程序和主程序使用时,为了确保对该变量的访问是可见的,可以使用 volatile 声明。使用 extern 可以在一个文件中声明一个在其他文件中定义的全局变量,使得当前文件能够访问该变量。使用 extern 可以在一个文件中声明一个在其他文件中定义的函数,使得当前文件能够调用该函数。

2024-07-23 23:20:39 395

原创 (六)C++之转换函数与模板

成员转换函数:class A{public:operator int() const{ //无返回reutn data;

2024-07-19 08:42:45 256

原创 (五)C++之多态与异常

基类指针可指向派生类对象, 动态联编。虚析构函数(内存泄漏)Exception类。

2024-07-19 08:35:04 180

原创 (四)C++之组合与继承

【代码】(四)C++之组合与继承。

2024-07-19 08:21:44 192

原创 (三)C++之运算符重载

C++准许以运算符命名函数!= 赋值运算符。( ) 仿函数。

2024-07-18 23:54:30 202

原创 (二)C++之类与对象

构造函数(类的初始化,创建类时自动调用;初始化表,this指针)拷贝构造函数 A(const A &x);类外: static int A::x = 10;析构函数(类的解构,销毁类时自动调用)赋值构造函数 operator=?常数据成员(构造函数初始化表赋值)调用方法 A::func();默认构造函数 A();

2024-07-18 23:42:49 421

原创 (一)C到C++

默认参数 : void debug(const char *ptr=“----------”);函数重载 : int cmp(int data1, int data2 );堆内存: malloc(),free() -> new, delete。引用 : void swp(int &a, int &b);面向对象编程(OOP): 类、对象、封装,继承、组合等。名字空间: namespace NAME1{ }

2024-07-18 23:30:03 118

原创 (一)数据库之sqlite3

参数:arg 接收sqlite3_exec 传递来的参数。返回值:成功为0 SQLITE_OK ,出错 错误码。返回值:成功为0 SQLITE_OK ,出错 错误码。callback 回调函数,只有在查询时,才传参。参数:filename 数据库名称。功能:查询语句执行之后,会回调此函数。1)系统命令 , 都以’.'开头。返回值:成功 SQLITE_OK。.schema 查看表的结构。f_name 列的名称。功能:得到错误信息的描述。参数:db 数据库句柄。errmsg 错误消息。

2024-07-13 21:46:53 781

原创 (十一)网络编程

Internet-“冷战”的产物1957年10月和11月,前苏联先后有两颗“Sputnik”卫星上天1958年美国总统艾森豪威尔向美国国会提出建立DARPA (Defense Advanced Research Project Agency),即国防部高级研究计划署,简称ARPA1968年6月DARPA提出“资源共享计算机网络” (Resource Sharing Computer Networks),目的在于让DARPA的所有电脑互连起来,这个网络就叫做ARPAnet,即“阿帕网”,是Interne

2024-07-12 14:22:49 562

原创 (十)进程间通信

对于以只写方式(O_WRONLY)打开的FIFO文件,如果open调用是阻塞的(即第二个参数为O_WRONLY),open调用将被阻塞,直到有一个进程以只读方式打开同一个FIFO文件为止;2 第二个参数中的选项O_NONBLOCK,选项O_NONBLOCK表示非阻塞,加上这个选项后,表示open调用是非阻塞的,如果没有这个选项,则表示open调用是阻塞的。当MAP_PRIVATE时候,mmap中的权限是对内存的限制,只需要文件有读权限即可,操作只在内存有效,不会写到物理磁盘,且不能在进程间共享。

2024-07-12 14:21:24 1037

原创 (九)线程的应用

我们平时创建一个线程,完成某一个任务,等待线程的退出。但当需要创建大量的线程时,假设T1为创建线程时间,T2为在线程任务执行时间,T3为线程销毁时间,当 T1+T3 > T2,这时候就不划算了,使用线程池可以降低频繁创建和销毁线程所带来的开销,任务处理时间比较短的时候这个好处非常显著。2 线程池工作线程,它是任务队列任务的消费者,等待新任务的信号。通俗的讲就是一个线程的池子,可以循环的完成任务的一组线程集合。1 任务队列,存储需要处理的任务,由工作线程来处理这些任务。判断是否有空闲的工作线程。

2024-07-12 14:19:27 583

原创 (三)数据结构之非线性表

树的逻辑结构 :树中任何节点都可以有零个或多个直接后继节点(子节点),但至多只有一个直接前趋节点(父节点),根节点没有前趋节点,叶节点没有后继节点。设完全二叉树的节点数为n,某节点编号为i。有n个节点的完全二叉树可以用有n+1个元素的数组进行顺序存储,节点号和数组下标一一对应,下标为零的元素不用。节点的层数等于父节点的层数加一,根节点的层数定义为一。若树中每个节点的各个子树的排列为从左到右,不能交换,即兄弟之间是有序的,则该树称为有序树。路径中前面的节点是后面节点的祖先,后面节点是前面节点的子孙。

2024-07-12 14:11:58 842

原创 (二)数据结构之线性表

设线性表 L=(a0,a1, ……,an-1),对 L的基本运算有:(1)建立一个空表:list_create(L)定义结构体指针L申请内存malloc判断是否为空初始化L和last标志位返回L(2)置空表:list_clear(L)判断L是否为空初始化L和last起始标志位(3)判断表是否为空:list_empty (L)。若表为空,返回值为1 , 否则返回 0判断last标志位是否为起始标志位4)求表长:length (L)判断L是否为空。

2024-07-12 14:11:17 619

原创 (四)stm32之通信协议

接收一个字节:SCL低电平期间,从机将数据位依次放到SDA线上(高位先行),然后释放SCL,主机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可接收一个字节(主机在接收之前,需要释放SDA)发送一个字节:SCL低电平期间,主机将数据位依次放到SDA线上(高位先行),然后释放SCL,从机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可发送一个字节。

2024-07-12 14:05:26 1917

原创 (三)TIM定时器

输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形。不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能。在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,常应用于电机控速等领域。PWM频率: Freq = CK_PSC / (PSC + 1) / (ARR + 1)计数器计数频率:CK_CNT = CK_PSC / (PSC + 1)

2024-07-12 14:03:04 272

原创 (二)EXIT外部中断

一.中断系统中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行中断优先级:当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源中断嵌套:当一个中断程序正在运行时,又有新的更高优先级的中断源申请中断,CPU再次暂停当前中断程序,转而去处理新的中断程序,处理完成后依次进行返回。

2024-07-05 23:33:28 326

原创 (一)STM32F1库函数之GPIO

3)keil工程里建分组Start、Library、User,将文件夹内的文件添加到工程分组中。(Library)库函数描述:misc.c/h;4)工程选项,C/C++,Include Paths内声明所有包含头文件的文件夹。(Start)定义SystemInit:System_xx.c/h。(User)定义中断处理函数:stm32f10x_it.c/h。(Start)启动调用函数描述:startup_md.s。(Start)内核寄存器描述:core_cm3.c/h。

2024-07-04 15:09:29 398

原创 (八)Linux的进程与线程

多任务处理是指用户可以在同一时间内运行多个应用程序,每个正在执行的程序被称为一个任务。一个任务包含一个或多个完成独立功能的子任务,其中子任务可以是进程或线程。Linux就是一个支持多任务的操作系统,比起单任务系统它的功能增强许多。

2024-06-25 20:18:36 878

原创 Stm32的C语言

关键字:#define用途:用一个字符串代替一个数字,便于理解,防止出错;提取程序中经常出现的参数,便于快速修改定义宏定义:引用宏定义://等效于int a = 12345;

2024-06-14 21:20:58 424

原创 (七)Linux的I/O编程

标准I/O的对象就是流。当用标准I/O打开一个文件时,就会创建一个FILE结构体描述该文件。其中FILE结构体称为流。标准I/O函数都基于流进行各种操作。标准I/O中的缓冲类型。

2024-05-26 16:35:31 935

原创 (十六)C语言的预处理器与头文件

引用头文件相当于复制头文件的内容,但是我们不会直接在源文件中复制头文件的内容,因为这么做很容易出错,特别在程序是由多个源文件组成的时候。C 或 C++ 程序中,建议把所有的常量、宏、系统全局变量和函数原型写在头文件中,在需要的时候随时引用这些头文件。此时,预处理器会跳过文件的整个内容,编译器会忽略它。有两种类型的头文件:程序员编写的头文件和编译器自带的头文件。1)typedef 仅限于为类型定义符号名称,#define 不仅可以为类型定义别名,也能为数值定义别名,比如您可以定义 1 为 ONE。

2024-05-10 09:20:00 1029

原创 (六)Linux的Shell编程(下)

和 Java、PHP 等语言不一样,sh 的流程控制不可为空。(1)选择语句1)if 语句语法格式:2)if else语法格式:3)if else-if else 语法格式:if else 的 […] 判断语句中大于使用 -gt,小于使用 -lt。如果使用 ((…)) 作为判断语句,大于和小于可以直接使用 > 和

2024-05-08 16:21:32 926

原创 (六)Linux的Shell编程(中)

s %c %d %f 都是格式替代符,%s 输出一个字符串,%d 整型输出,%c 输出一个字符,%f 输出实数,以小数形式输出。%-10s 指一个宽度为 10 个字符(- 表示左对齐,没有则表示右对齐),任何字符都会被显示在 10 个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。printf 使用引用文本或空格分隔的参数,外面可以在 printf 中使用格式化字符串,还可以制定字符串的宽度、左右对齐方式等。最高, -a 次之, -o 最低。

2024-05-08 15:29:41 875

原创 (六)Linux的Shell编程(上)

在 Shell 编程中,变量是用于存储数据值的名称。

2024-05-08 10:54:00 2074

原创 (五)Linux的编程环境

make 工程管理器也就是个“ 自动编译管理器” ,它能够根据文件时间戳自动发现更新过的文件而减少编译的工作量, 同时, 它通过读入makefile 文件的内容来执行大量的编译工作。递归展开方式定义的变量是在引用该变量时进行替换的, 即如果该变量包含了对其他变量的引用, 则在引用该变量时一次性将内嵌的变量全部展开, 虽然这种类型的变量能够很好地完成用户的指令, 但是它也有严重的缺点, 如不能在变量后追加内容( 因为语句:CFLAGS = $(CFLAGS) -O 在变量扩展过程中可能导致无穷循环)。

2024-05-07 17:47:39 715

原创 (四)Linux的用户与用户组管理

添加和删除用户对每位Linux系统管理员都是轻而易举的事,比较棘手的是如果要添加几十个、上百个甚至上千个用户时,我们不太可能还使用useradd一个一个地添加,必然要找一种简便的创建大量用户的方法。系统中有一类用户称为伪用户,这些用户在/etc/passwd文件中也占有一条记录,但是不能登录,因为它们的登录Shell为空。常用的选项包括-c, -d, -m, -g, -G, -s, -u以及-o等,这些选项的意义与useradd命令中的选项一样,可以为用户指定新的资源值。刚添加的账号是被锁定的,无法使用。

2024-05-07 10:08:45 889

原创 (三)Linux的文件基本属性

其中,我们可以使用数字来代表各个权限,各权限的分数对照如下:r:4,w:2,x:1。第 2、5、8 位表示写权限,如果用 w 字符表示,则有写权限,如果用 - 字符表示没有写权限;第 3、6、9 位表示可执行权限,如果用 x 字符表示,则有执行权限,如果用 - 字符表示,则没有执行权限。其中,第 1、4、7 位表示读权限,如果用 r 字符表示,则有读权限,如果用 - 字符表示,则没有读权限;第4-6位确定属组(所有者的同组用户)拥有该文件的权限,第7-9位确定其他用户拥有该文件的权限。

2024-05-06 10:31:01 785

原创 (二)Linux的系统目录结构

登录系统后,在当前命令窗口下输入命令:ls /,可以查看根目录。

2024-05-06 10:30:07 740

原创 (一)Linux的vim编辑器的使用

代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。vim 则可以说是程序开发者的一项很好用的工具。基本上 vi/vim 共分为三种模式,命令模式(Command Mode)、输入模式(Insert Mode)和命令行模式(Command-Line Mode)(1)一般模式可用的光标移动、复制粘贴、搜索替换等。(2)一般模式切换到编辑模式的可用的按钮说明。(4)Vim 环境的变更。

2024-05-05 17:57:18 2024

原创 (十五)C语言的内存管理

指针是一个变量,它存储了一个内存地址,这个内存地址可以指向任何数据类型的变量,包括整数、浮点数、字符和数组等。C 语言提供了一些函数和运算符,使得程序员可以对内存进行操作,包括分配、释放、移动和复制等。当程序退出时,操作系统会自动释放所有分配给程序的内存,但是,建议您在不需要内存时,都应该调用函数 free() 来释放内存。或者,您可以通过调用函数 realloc() 来增加或减少已分配的内存块的大小。但是,如果您预先不知道需要存储的文本长度,例如您想存储有关一个主题的详细描述。

2024-05-05 15:35:25 293

原创 (十四)C语言的位域

在 main 函数中,创建了一个 packed_struct 类型的结构体变量 pack,并分别给每个位域成员赋值。3.位域的数据类型可以是 int、unsigned int、signed int 等整数类型,也可以是枚举类型。5.位域的访问是通过点运算符(.)来实现的,与普通的结构体成员访问方式相同。2.位域的宽度不能超过其数据类型的大小,因为位域必须适应所使用的整数类型。1.定义位域时,可以指定成员的位域宽度,即成员所占用的位数。4.位域可以单独使用,也可以与其他成员一起组成结构体。

2024-05-05 11:39:49 144

原创 (十三)C语言的共用体

为了定义共用体,您必须使用 union 语句,方式与定义结构类似。union 语句定义了一个新的数据类型,带有多个成员。...union tag 是可选的,每个 member definition 是标准的变量定义,比如 int i;或者 float f;或者其他有效的变量定义。在共用体定义的末尾,最后一个分号之前,您可以指定一个或多个共用体变量,这是可选的。

2024-05-05 10:40:21 237

原创 (十二)C语言的结构体

结构体定义由关键字 struct 和结构体名组成,结构体名可以根据需要自行定义。...tag :结构体标签。member-list :标准的变量定义,比如 int i;或者 float f;,或者其他有效的变量定义。variable-list :结构变量,定义在结构的末尾,最后一个分号之前,您可以指定一个或多个结构变量。

2024-05-05 10:27:22 342

原创 (十一)C语言的枚举

1、先定义枚举类型,再定义枚举变量enum DAY2、定义枚举类型的同时定义枚举变量enum DAY} day;3、省略枚举名称,直接定义枚举变量enum} day;

2024-05-05 10:08:32 171

原创 (一)论数据结构

【代码】论数据结构。

2024-05-04 11:46:37 213

原创 (十)C语言的函数

题目:编写一个函数,统计字符串中小写字母的个数,并把字符串的小写字母转为大写字母。题目:编写函数,计算一个维整行数组的所有元素的和。题目:编写一个指针函数,删去一个字符串中的空格。题目:编写一个递归函数,计算斐波那切数列。题目:编写一个指针函数,实现字符串连接。题目:编写一个递归函数,计算n!题目:定义求x的n次方值的函数。

2024-05-01 22:27:28 210

空空如也

空空如也

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

TA关注的人

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