算法【快速排序】 快速排序。选择一个作为比较的元素,这里我们选择首元素,这个元素我叫他‘比较元素’;前后两个指针(其实是索引变量)同时往后和往前进行遍历,开头的指针遇到比‘比较元素’大的元素停下来(空循环体的循环即可实现),末尾的指针往前遍历,遇到比‘比较元素’小的元素停下来;两个元素都停止后,交换 ...
数据结构【动态数组】 在堆中申请数组空间,扩容时realloc,注意不可增删改的情况并处理即可。 以下代码不一定完全正确。 #include <stdio.h> #include <stdlib.h> /** * 声明动态数组,并提供相关的函数操作 */ // 动态数组结构体 typedef str ...
常用操作文件目录的函数 1. CreateDirectory 创建文件夹 原型: BOOL CreateDirectory( LPCTSTR lpPathName, LPSECURITY_ATTRIBUTES lpSecurityAttributes ); 参数说明: lpPathName 要创建的 ...
#define offset_of(type, member) ((unsigned int)&((type*)0)->member) #define container_of(ptr, type, member) ((type *)((char *)(ptr) - offset_of(type, ...
概要 由于目前在做一个比较复杂的嵌入式项目,想要借此提升一下代码的结构设计能力,所以想要以面向对象的思想来完成这个项目,即把每个板载外设资源视为一个对象,采用msp+bsp的模式,对每个bsp外设实现对象化处理,现有方案需要手动传入对象引用,调用方法时比较麻烦,所以考虑简化调用方式。 面向对象实现思 ...
结构是一种复合的数据类型,可以包含多个不同类型的成员变量。 我们可以通过结构类型声明结构,并通过结构变量来访问结构的成员。结构变量可以赋初值,可以进行运算,还可以作为函数参数传递。 ...
C语言循环结构详解 在C语言中,循环结构是一种重要的控制结构,它允许我们重复执行一段代码,以达到特定的目的。循环结构可以帮助我们简化重复性的任务,提高代码的效率。本篇文章将深入探讨C语言中的循环结构,包括 while 循环、for 循环、do-while 循环以及循环中的控制语句。 1. while ...
C语言分支结构详解 1. if 语句 在本篇博客文章中,我们将深入探讨C语言中的if语句及其相关用法。if语句是一种用于条件判断的分支语句,它允许我们根据条件的真假来执行不同的代码块。 1.1 if 语句的基本语法和用法 if语句的基本语法如下所示: if (条件) { // 条件为真时执行的代码块 ...
数据结构【1】 1、数据结构是什么,有什么作用 数据结构就是 存储数据时,将数据排列的关系。 使用数据结构的目的是为了使数据的增删查改更快速便捷。 2、数据之间的关系: 集合、线性、树形、图形(网状)。 集合之间的数据基本没有什么关系。 线性关系是数据间是一条线或几条线这样存储。 ...
大家好,我是五月。 嵌入式开发 嵌入式开发产品必须依赖硬件和软件。 硬件一般使用51单片机,STM32、ARM,做成的产品以平板,手机,智能机器人,智能小车居多。 软件用的当然是以linux系统为蓝本,以做成各种智能应用系统,比如智能家居系统,智能车库系统,只能安防系统。 用的ARM芯片内核 ...
C语言【几个关于字符串/字符的函数的使用 以及 几个特殊的++】 // 将info的值从第一个空格或换行处截取赋给指针,空格或换行也不要了。 sscanf(info, "%s", 指针); scanf("%s", 指针); // 从控制台输入到指针,空格或换行处截取,不要空格或换行 scanf("% ...
C语言【文件操作】 1、输入/输出流的定义。 C语言中,文件输入/输出以流的方式进行。 读还是写,输入还是输出,是站在内存(程序)的角度来看的。从程序(内存)向 数据源(如文件、网络等)传递数据的过程叫做读数据,读数据使用的路径叫做输入流,一般读数据的过程是一个解码的过程;从数据源(如文件、 ...
SQLite,作为一款嵌入式关系型数据库管理系统,一直以其轻量级、零配置以及跨平台等特性而备受青睐。不同于传统的数据库系统,SQLite是一个库,直接与应用程序一同编译和链接,无需单独的数据库服务器进程,实现了数据库的零配置管理。这种设计理念使得SQLite成为许多嵌入式系统、移动应用和小型项目中的... ...
C语言【自定义数据类型、typedef、动态内存分配】 一、自定义数据类型。 关于下面讲到的所有自定义数据类型(enum、struct、union),有一点要说的是:定义类型不是声明变量,做这步操作时不分配内存,也不能在定义类型时赋值(枚举那个不是赋值,是做一个限定,赋值时赋限定之外的值也不报错 ...
C语言【预处理器】 1、一些关于预处理的知识 C代码中,一般带 # 的都是预处理指令,包括 宏替换、文件包含、条件编译 等。 为兼容一些老编译器, # 前后一般不写空格 预处理指令后面不加分号。 2、宏定义 // 格式如下 #define 宏名称 (替换文本) // 这个替换文本记得加上 ...
C语言【指针】 1、指针类型长度随操作系统,64位操作系统为8Byte。 具体说一下:地址相当于门牌号,一般一个地址指向的空间是一个字节(下面按一个字节叙述,计算机底层也许也有按双字节编码的)。对于64位机器,某一个地址有64位,所以在空间里存那某一个地址时,这64位即8Byte。这64位总共能 ...
题目2:求矩阵中的马鞍点 问题描述 所设计的程序能够通过编译。若矩阵 中的某个元素 是第i行中的最小值,同时又是第j列中的最大值,则称此元素为该矩阵中的一个马鞍点。编写程序求出矩阵中的所有马鞍点。 输入格式 首先输入两个整数n和m,为矩阵维数,然后输入矩阵的值。 输出格式 输出矩阵中的所有马鞍点,输 ...
代码实现 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 typedef struct Node // 定义一个结构体 5 { 6 float data; 7 struct Node *next; 8 } Node; 9 10 Node *Chuangz ...
C语言【函数、作用域、常用系统函数】 一、函数 1、函数的声明 // 函数声明格式 int add(int x, int y); // 或 int add(int, int); 自定义函数如果放在main函数之后,需要声明函数才可以访问到。如果未声明,则编译器会自动补一个返回类型未int类型的声 ...
C语言【数组】 一、数组的一些零碎的知识 1、数组在内存中的空间是连续的,数组下标从0开始; 数组中存储的类型是一致的(只能存储同一类型,这样可以快速定位某元素) 2、指针可看作存储地址的变量,数组名可看作地址那个常量,所以数组名不可修改 。可以改的是数组元素:a[0] 或 *a 二、一维数组 1、 ...