![](https://img-blog.csdnimg.cn/20190918140129601.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C/C++
文章平均质量分 81
C/C++
心跳包
硕士研究生,嵌入式软件开发,蓝牙,IOT,人工智能方向
展开
-
基于VS2019开始C++之第一个MFC程序
一、创建项目然后点下一步,配置项目,这里我命名的是myfisrtmfc点击创建按钮,然后弹出下面的对话框。对上面的MFC应用程序进行配置,如下:点击完成,生成如下界面。第一次编译生成的默认项目,之后得到下面的界面点击VS2019的界面,“解决方案资源管理器”到这里,项目建成,并且编译通过。二、添加自定义的功能(以比较通用的画图为例)点击资源视图,这里的控件将是后面需要操作的。双击IDR_MAINFRAME,可以在这里面添加画图功能。也可以在Ribbon里面添.原创 2021-06-05 13:59:07 · 3589 阅读 · 6 评论 -
重读《c primer plus》发现了99%的人都会忽略的知识点之ANSI/ISO C标准
1.你需要知道什么是ANSI/ISO C标准ANSI C是由(ANSI)及(ISO)推出的关于C语言的标准。ANSI C 主要标准化了现存的实现, 同时增加了一些来自 C++ 的内容 (主要是函数原型) 并支持多国字符集 (包括备受争议的三字符序列)。 ANSI C 标准同时规定了 C 运行期库例程的标准。2.ANSI编译器在遇到代码警告类型不匹配的情况extern int func(float); int func(x) float x;不匹配的原因:旧的C编...原创 2021-07-07 00:04:51 · 1215 阅读 · 3 评论 -
重读《c primer plus》发现了99%的人都会忽略的知识点之声明和初始化
目录1.你需要知道基本概念什么是声明?2.你可能忽略的知识点2.1 关于整数类型的选择2.2 定义、声明全局变量和函数的小技巧2.3extern用法2.3.1 extern在函数中的作用2.3.2 extern在变量中声明的作用2.4 复杂声明的解读2.5 函数指针的声明这本《c primer plus》是很多人学习C语言的圣经,博主今天重读本书,发现了不得了的地方。1.你需要知道基本概念什么是声明?声明指定了一个变量的标识符,用...原创 2021-07-05 23:09:52 · 530 阅读 · 4 评论 -
C语言写简单的单项链表
/* 基本数据结构的定义以及函数的声明 */typedef int ElemType;typedef struct Node{ ElemType elem; struct Node* next;} Node, * NodePtr, **ForwardList;NodePtr createNode(ElemType x);void showList(ForwardList lst);void destroyList(ForwardList lst);// 创建元素为.原创 2020-05-25 21:42:33 · 396 阅读 · 1 评论 -
排序算法详解
关于快速排序的逻辑原理是这样的:将两个指针i,j分别指向表的起始和最后的位置,T为临时变量。反复操作以下两步:(1)j逐渐减小,并逐次比较j指向的元素和目标元素的大小,若p(j)<T则交换位置。(2)i逐渐增大,并逐次比较i指向的元素和目标元素的大小,若p(i)>T则交换位置。直到i,j指向同一个值,循环结束。下面是源码#include <stdio...原创 2020-05-13 15:46:24 · 493 阅读 · 0 评论 -
C 库函数 - strcat()
C 库函数 -strcat()C 标准库 - <string.h>描述C 库函数char *strcat(char *dest, const char *src)把src所指向的字符串追加到dest所指向的字符串的结尾。声明下面是 strcat() 函数的声明。char *strcat(char *dest, const char *src)...原创 2020-02-28 11:13:11 · 558 阅读 · 0 评论 -
C语言可重入函数和不可重入函数
可重入函数和不可重入函数的概念 在函数中如果我们使用静态变量了,导致产生中断调用别的函数的 过程中可能还会调用这个函数,于是原来的 静态变量被在这里改变了,然后返回主体函数,用着的那个静态变量就被改变了,导致错误。这类函数我们称为不可重入函数。 如果是在函数体内 动态申请内存的话,即便 新的线程调用这个函数也没事,因为新的线程使用的是新的函数的 新申请的动态内存(静态变量只有一份,所以...原创 2019-12-14 16:16:33 · 523 阅读 · 0 评论 -
break和continue区别
1.break用break语句可以使流程跳出switch语句体,也可以用break语句在循环结构终止本层循环体,从而提前结束本层循环。使用说明:(1)只能在循环体内和switch语句体内使用break;(2)当break出现在循环体中的switch语句体内时,起作用只是跳出该switch语句体,并不能终止循环体的执行。若想强行终止循环体的执行,可以在循环体中,但并不在switch语...原创 2019-11-29 09:11:25 · 396 阅读 · 0 评论 -
#define sec(x) __attribute__((section(#x),used))
#define sec(x) __attribute__((section(#x),used))关键字attribute可用于为函数或数据声明属性值,这样可以让编译程序优化处理。比如内核里面经常能看见的section:#define __exception __attribute__((section(".exception.text")))1具有该属性...原创 2019-11-26 13:47:22 · 1474 阅读 · 0 评论 -
CRC8校验接口(C语言)
1.调试原创 2019-11-06 10:29:01 · 1157 阅读 · 0 评论 -
zbar库中的zbar_scan_y函数
zbar_symbol_type_t zbar_scan_y (zbar_scanner_t *scn, int y){ /* FIXME calc and clip to max y range... */ /* retrieve short value history */ register int x...原创 2019-11-01 15:14:48 · 925 阅读 · 0 评论 -
嵌入式链接脚本(LINK SCRIPT)介绍
1. 概论每一个链接过程都由链接脚本(linkerscript, 一般以lds作为文件的后缀名)控制. 链接脚本主要用于规定如何把输入文件内的section放入输出文件内, 并控制输出文件内各部分在程序地址空间内的布局. 但你也可以用连接命令做一些其他事情.连接器有个默认的内置连接脚本, 可用ld--verbose查看. 连接选项-r和-N可以影响默认的连接脚本(如何影响).-T选项用以指...转载 2019-10-26 11:21:36 · 1171 阅读 · 0 评论 -
十六进制数组转换成ASCII码
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <strings.h>#define HEX2ASC(a) ((((a)&0xF)>9)?((a)&0xF)-10+'a':((a)&0xF)+'0')static void...原创 2019-10-22 11:34:33 · 3142 阅读 · 0 评论 -
Http:GET和POST请求的区别
GET和POST请求的区别GET请求 GET /books/?sex=man&name=Professional HTTP/1.1 Host: www.wrox.com User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6) Gecko/20050225 Firefo...原创 2019-10-22 09:47:17 · 517 阅读 · 0 评论 -
C(string.h)字符串操作函数总结
1.strcpy函数原型:strcpy(str1,str2);功能:将字符串str2复制到字符串str1中,并覆盖str1原始字符串,可以用来为字符串变量赋值返回:str1注意:1)字符串str2会覆盖str1中的全部字符,2)字符串str2的长度不能超过str1char str1[] = "We are csdn!";char str2[] = "Hello!";st...转载 2019-10-22 09:16:56 · 461 阅读 · 0 评论 -
网络字节
网络字节顺序NBO(Network Byte Order):按从高到低的顺序存储,在网络上使用统一的网络字节顺序,可以避免兼容性问题。在Linux和Windows网络编程时需要用到htons和htonl函数,用来将主机字节顺序转换为网络字节顺序。inet_ntoa() 简述: 将网络地址转换成“.”点隔的字符串格式。 #include <winsock...原创 2019-10-15 17:51:38 · 453 阅读 · 0 评论 -
atoi函数
atoi (表示 ascii to integer)是把字符串转换成整型数的一个函数,应用在计算机程序和办公软件中。int atoi(const char *nptr) 函数会扫描参数 nptr字符串,会跳过前面的空白字符(例如空格,tab缩进)等。如果 nptr不能转换成 int 或者 nptr为空字符串,那么将返回 0[1]。特别注意,该函数要求被转换的字符串是按十进制数理解的。atoi...原创 2019-10-15 11:01:05 · 375 阅读 · 0 评论 -
fflush函数
函数名: fflush功 能: 清除读写缓冲区,需要立即把输出缓冲区的数据进行物理写入时头文件:stdio.h原型:int fflush(FILE *stream)其中stream是要冲洗的流fflush()会强迫将缓冲区内的数据写回参数stream 指定的文件中. 如果参数stream 为NULL,fflush()会将所有打开的文件数据更新fflush(stdin)刷新标...原创 2019-04-10 09:36:11 · 719 阅读 · 0 评论 -
C语言之二级指针
#include <stdio.h>#include <stdlib.h>int main(){ int a[]={1,2,3,4,5};//这个数组里存入的是具体的数据 int *num[]={&a[0],&a[1],&a[2],&a[3],&a[4]};//这个数组里面就是全部存的数内存地址,并不是数据 ...原创 2019-04-12 15:13:15 · 389 阅读 · 0 评论 -
C语言之typedef void (*T) (void *)
typedef void (*T) (void *);定义了一个指向函数的指针T,其返回值 void 类型,参数也是后面的(void *)接下来我们就可以直接使用 T 来定义这种指针变量,比如:T fn1; //等价于void fn1 (void *);使用:void func(void *); //声明函数T fn1; //定义变量fn1=func; //赋值(*fn1)(); //执行...原创 2018-05-28 10:01:10 · 4001 阅读 · 3 评论 -
C语言之字段类型应用的技巧
在各种设备间的传输协议或者通信协议中,一般对数据的字段类型都各不相同,比如BCD码,BIN码,ASCII码等。下面接收几种字段类型定义的实例1.BCD码定义一个16位机器编码 2018041912345678uint8_t Dev[8] ; 一般两种存储方式:大端模式:高位存在低位地址上Dev[0]=0x20;Dev[1]=0x18;Dev[2]=0x04;Dev[3]=0x19...原创 2018-04-19 17:49:54 · 512 阅读 · 0 评论 -
fcntl函数
fcntl是计算机中的一种函数,通过fcntl可以改变已打开的文件性质。fcntl针对描述符提供控制。参数fd是被参数cmd操作的描述符。针对cmd的值,fcntl能够接受第三个参数int arg。#include <sys/types.h>#include <unistd.h>#include <fcntl.h>fcntl()针对(文件)描述符...原创 2019-04-10 09:49:16 · 383 阅读 · 0 评论 -
数据结构之链表
为了避免插入和删除的线性开销,我们需要允许表可以不连续存储,否则表的部分或全部需要整体移动。链表由一系列不必在内存中相连的结构组成。每一个结构均含有表元素和指向包含该表后续元素的结构的指针。我们称之为NEXT指针,最后一个next指针指向NULL。指针变量是包含存储另外某个数据地址的变量。因此,如果P被声明为指向一个结构的指针,那么存储在P中的值就被解释为主存中的一个位置,在该位置能够找到...原创 2019-04-26 12:36:58 · 395 阅读 · 0 评论 -
指针与数组的区别
指针与数组的区别 指针 数组 保存数据的地址,任何存入指针变量 p 的数据都会被当作地址来处理 保存数据,数组名 a 代表的是数组首元素的首地址,&a 是整个数组的首地址 间接访问数据,首先取得指针变量 p 的内容,把它当做地址,然后从这个地址提取数据或向这个地址写入数据。 指针可以以指针的形式访问 "*(p+i)" 也可以以下标的形式访问 "p[i]"。但其本...原创 2019-04-18 14:36:54 · 482 阅读 · 0 评论 -
堆和栈的区别
在 C 语言中,内存分配方式不外乎有如下三种形式: 从静态存储区域分配:它是由编译器自动分配和释放的,即内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在,直到整个程序运行结束时才被释放,如全局变量与 static 变量。 在栈上分配:它同样也是由编译器自动分配和释放的,即在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元将被...原创 2019-04-18 14:55:25 · 311 阅读 · 0 评论 -
程序在计算机中如何运行的
一、程序编译的过程二、程序加载进CPU的过程三、CPU的组成累加寄存器(AC) :主要进行加法运算。标志寄存器(PSW) :记录状态,做逻辑运算。程序计数器(PC) :是用于存放下一条指令所在单元的地址的地方。基质寄存器(BX) :储存当前数据内存开始的位置。变址寄存器 :储存基质寄存器的相对位置。通用寄存器(GPRs):支持有所的用法。指令寄存器(IR) :CPU...原创 2019-04-19 09:08:40 · 3260 阅读 · 0 评论 -
嵌入式软件工程师面试需要的C基础
转自:https://github.com/xiaowenxia/embedded-notes/blob/master/c%E5%9F%BA%E7%A1%80.md目录c基础 数据类型说明 volatile 指针 函数指针 函数指针数组 指针数组 数组指针 指针的指针 main函数的返回值 const 浮点数存储方式 c题目...转载 2019-05-08 15:34:50 · 547 阅读 · 0 评论