C/C++
明月清风-精进不止
这个作者很懒,什么都没留下…
展开
-
不常用但是很又用的函数等
当后面紧跟着的输出字段长度小于 n 的时候,在该字段前面用空格补齐,当输出字段长度大于 n 时,全部整体输出。setw默认填充的是空格,搭配setfill可以填充其他的;setw() 函数只对紧接着的输出产生作用。n 表示宽度,用数字表示。原创 2023-02-01 10:00:17 · 96 阅读 · 1 评论 -
大小端总结
由于主控与显控之间采用的是UDP协议,所以显控给主控发送的数据要按照网络字节序(也就是大端)发送,也就是低字节数据放到高地址,举例:比如要把tmp这样一个int四字节的数据,unsigned int tmp = 0x11223344;由于一般显控主机内核是x86架构的,都是小端存储的,所以在应用UDP协议的时候不能直接用结构体赋值,然后强转char*发送,需要手动先转换成网络字节序,主控接收端接收到数据再用结构体指针强转才能正确。原创 2022-10-29 15:59:03 · 297 阅读 · 0 评论 -
[转]大端小端详解(含代码及详细注释)
转自[嵌入式er笔记]大端小端详解(含代码及详细注释) - 知乎之前文章《 浅谈ARM ABI,Android ABI 》中有提到计划专门一篇文章讲下大小端,今天兑现一下。1>"大端" "小端"的来源关于大端小端名词的由来,网传有一个有趣的故事,可以追溯到1726年的Jonathan Swift的《格列佛游记》,其中一篇讲到有两个国家因为吃鸡蛋究竟是先打破较大的一端还是先打破较小的一端而争执不休,甚至爆发了战争。《格利佛游记》:“Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。战争转载 2022-10-29 15:37:53 · 536 阅读 · 0 评论 -
[转]动态库*.dll文件的Debug/Release版本是否可以混用(交叉用)?
含有stl的debug动态库和release动态库在项目中不能混用,debug项目必须用debug库, release 项目必须用release库;使用一些第三方的dll,比如opencv,会分别生成debug和release的dll,在exe中必须要引用指定版本的dll,不能混用,否则会出错;但是还有一些第三方的dll,比如halcon,只提供给用户release的dll,用户的debug版和release版的exe都可以引用此dll。dll在debug和release模式下如何交叉引用?...转载 2022-08-30 14:21:34 · 1033 阅读 · 0 评论 -
整形的分类:short in long longlong
整形变量在内存中占用的字节数与操作系统有关,注意longlong原创 2022-06-30 17:27:07 · 119 阅读 · 0 评论 -
C语言标准函数scanf不安全的原因
scanf为什么不安全,scanf_s为什么安全?原创 2022-06-30 16:04:31 · 1529 阅读 · 0 评论 -
【转】STL六大组件-容器、迭代器、算法、仿函数、适配器、配置器
1.容器(containers):各种数据结构,如vector, list, deque, set, map等,用来存放数据,从实现的角度来看,STL是一种class template。2.算法(algorithms):常用算法如sort, search, copy, erase等,从实现的角度来看,STL算法是一种function template。3.迭代器(iterators):扮演容器和算法之间的胶合剂,是所谓的“泛型指针”。从实现的角度看,迭代器是一种将operator*, operato转载 2021-12-24 15:04:20 · 321 阅读 · 0 评论 -
利用STL的set容器进行升序排序和降序排序--源码
利用STL的set容器进行升序排序和降序排序--源码--VS2019下运行测试成功:#include <iostream>#include <set>using namespace std;struct myfunc{ bool operator()(int v1,int v2) const { return v1 > v2; }};int main(){ //set升序排列 set<int...原创 2021-12-23 13:45:02 · 1889 阅读 · 0 评论 -
C/C++推荐用书
原创 2021-12-16 08:50:34 · 761 阅读 · 0 评论 -
malloc之后要检查是否分配成功 这样就没有warning报告了
int* pData = NULL; pData = (int*)malloc(sizeof(int)); if (pData) { *pData = 5; std::cout << *pData << std::endl; }原创 2021-12-14 11:37:39 · 1435 阅读 · 0 评论 -
FilePath、FileName、FileTitle区别
FilePath--完整的文件路径;eg: c:/test/xxj.txtFileName--文件名带后缀; eg:xxj.txtFileTitle--不带后缀名; eg:xxj原创 2021-12-14 11:20:48 · 2429 阅读 · 0 评论 -
【转】空指针赋值分区
空指针赋值分区为什么通过空指针读写的时候就会出现异常? 除了NULL表示空指针,是否还有其他的值也是空指针? 如果还有其他的值,你们这些表示空指针的值都是什么?为什么?首先解答第一个问题,在windows核心编程第四版的windows的内存结构一章中,表13-1有提到NULL指针分配的分区。其范围是从0x00000000到0x0000FFFF。这段空间是空闲的,对于空闲的空间而言,没有相应的物理存储器与之相对应,所以对这段空间来说,任何读写操作都是会引起异常的。有了上面的解答后,第二个问题就很转载 2021-12-14 11:18:01 · 184 阅读 · 0 评论 -
内存分区0x00000000-0x0000FFFF共64K是null指针
原创 2021-12-14 11:16:18 · 1241 阅读 · 0 评论 -
const_cast-----用于转换指针或引用,去掉类型的const属性
const_cast-----用于转换指针或引用,去掉类型的const属性原创 2021-11-22 14:10:04 · 1303 阅读 · 0 评论 -
函数模板----template<typename T>/ ttemplate<class T>
#include <iostream>using namespace std;template<class T>// 这句话的意思是告诉编译器紧接着的函数中的T不要报错,T代表的是泛型的数据void swapT(T& a, T& b){ T c = a; a = b; b = c;}int main(){ int a = 10; int b = 20; //1.编译器自动推导类型 swa.原创 2021-10-28 10:27:58 · 255 阅读 · 0 评论 -
[转载]关于_beginthreadex和CreateThread的区别
关于_beginthreadex和CreateThread的区别在 Win32 API 中,创建线程的基本函数是 CreateThread,而 _beginthread(ex) 是C++ 运行库的函数。为什么要有两个呢?因为C++ 运行库里面有一些函数使用了全局量,如果使用 CreateThread 的情况下使用这些C++ 运行库的函数,就会出现不安全的问题。而 _beginthreadex 为这些全局变量做了处理,使得每个线程都有一份独立的“全局”量。所以,如果你的编程只调用 Win原创 2021-10-26 08:55:38 · 149 阅读 · 0 评论 -
结构体对齐
#pragma pack(push)//#pragma pack(1) typedef struct _TEST { int a; float b; char chReserved[16]; char tmp; }Test,*PTest;#pragma pack(pop)////如果没有#pragma pack(push)和#pragma pack(pop),#pragma pack(1)是对当前文件有效,如果...原创 2021-10-25 11:01:31 · 58 阅读 · 0 评论 -
二维数组长度、初始化
int a[7][3] = {0};//7行3列 int isize = sizeof(a);//二维数组的长度 int iRow = sizeof(a) / sizeof(a[0]);//二维数组的行数=二维数组的长度/一行的长度 int iCol = sizeof(a[0]) / sizeof(a[0][0]);//二维数组的列数=一行的长度/具体一个值的长度 cout << "二维数组a的长度:" << isize << en...原创 2021-10-25 09:24:50 · 159 阅读 · 0 评论 -
windows控制台程序--输出调试信息 cout<<
const char * strFileName = "./test.bin"; FILE *pf = fopen(strFileName,"rb"); if( NULL == pf ) { cout<< strFileName << "文件打开失败!\n"; }原创 2021-09-29 10:27:01 · 235 阅读 · 0 评论 -
改工作路径 _chdir
#include <iostream>#include<windows.h>#include <direct.h>//_chdir的头文件 C函数int main(){ _chdir("D:\\"); LPCSTR name = "notepad.exe SYS.LOG"; ::WinExec(name, SW_SHOW); _chdir("E:\\"); name = "notepad.exe E.LOG...原创 2021-08-17 16:21:11 · 187 阅读 · 0 评论 -
VS官方资源地址
串口:配置串口资源Configuring a Communications Resourcehttps://docs.microsoft.com/en-us/windows/win32/devio/configuring-a-communications-resource监测串口事件Monitoring Communications Eventshttps://docs.microsoft.com/en-us/windows/win32/devio/monitoring-communicat原创 2021-08-09 14:23:25 · 113 阅读 · 0 评论 -
CComboBox --SetItemData
CComboBox *cbBautRate = (CComboBoxEx*)GetDlgItem(IDC_COMBO_BAUT_RATE); cbBautRate->SetItemData(cbBautRate->AddString(L"300"), 300);原创 2021-08-07 17:19:43 · 399 阅读 · 0 评论 -
PCB---Processing Control Block 进程控制块也叫进程描述符
PCB是系统感知进程存在的唯一标志。记载的信息,包括:程序计数器:进程状态:new ready running waiting blocked原创 2021-08-05 09:41:46 · 175 阅读 · 0 评论 -
MMU---Memory Management Unit内存管理单元
MMU---Memory Management Unit内存管理单元原创 2021-08-05 09:23:04 · 153 阅读 · 0 评论 -
int *p=0 是对的 但是int *p=10就不对 因为第一个式子的0实际指的是NULL 第二个相当于是 int *p; p=10;
int *p=0 是对的 但是int *p=10就不对 因为第一个式子的0实际指的是NULL 第二个相当于是 int *p; p=10;char *s="adf";*s='d'; 不对原创 2021-08-02 18:11:06 · 1567 阅读 · 0 评论 -
初始化列表的使用场景三四:在子类构造函数的初始化列表中给父类有参构造函数初始化
Father.h------------------#pragma once#include <iostream>using namespace std;class CFather{public: CFather(string strXing,string strProvince,int iAge); virtual ~CFather(); string GetXing(); string GetProvince(); int GetAge();private:.原创 2021-07-03 21:21:43 · 121 阅读 · 0 评论 -
继承的方式:public protected private
类的私有的成员就是自己私有的,谁也继承不了。父类能被子类继承的只可能有父类的保护成员和共有成员,具体子类到底能继承哪些父类的成员,还得看子类继承父类的方式是公有继承还是保护继承:如果是保护继承,则父类的保护到子类仍然是保护,父类的公用到子类降级为保护;如果是公有继承,则父类的保护到子类保持原样,父类的公有到子类也是保持原样;如果是私有继承,则父类的保护和公有,到子类都降级为私有;...原创 2021-07-02 13:10:02 · 102 阅读 · 0 评论 -
构造函数和析构函数顺序问题:1.类的成员对象;2.父类;3.子类
原创 2021-07-02 11:05:40 · 93 阅读 · 0 评论 -
初始化列表的使用场景二:用于给一个类的类成员对象初始化(该类没有无参构造时)
#pragma once#include <string>using namespace std;class CStudent{public: CStudent(string strName,int iAge); ~CStudent(); string GetStudentaName(); int GetStudentAge();private: string strName; int iAge;};#include "Student.h"CStuden.原创 2021-07-01 15:42:06 · 106 阅读 · 0 评论 -
初始化列表的使用场景一:用于给一个类的enum枚举变量初始化
Son.h头文件#pragma onceclass CSon{public: CSon(); ~CSon(); enum Index { first = 1, second =2, third =3 }; Index m_Index;};Son.cpp#include "Son.h"#include <iostream>using namespace std;CSon::CSon():m_Index(second){原创 2021-07-01 15:18:11 · 228 阅读 · 0 评论 -
解决4996错误:VS2013(含)以后不允许使用标准C库函数sprintf
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include<stdlib.h>void test01(){ //scanf strcpy sprintf char *test = NULL; test = malloc(32); //注意这句话是给字符串指针test分配内存 不然会出内存错误 /*char test[32];*/ 如果不适用上面两句话 只使用这一句替代上面两句也可以 sprint.原创 2021-06-30 15:58:58 · 242 阅读 · 0 评论 -
C语言:system(“pause“) system(“calc“)
#include <stdio.h>#include <stdlib.h>int main(){ printf("hello world");system("pause"); system("calc");//调用系统计算器 windows平台 //syatem("ls")//linux平台 需要头文件#include <stdlib.h> return 0;//在C语言中,return 0代表函数执行成功,retur...原创 2021-06-29 16:04:02 · 413 阅读 · 0 评论 -
写接口--UML接口类的表现方式
如何定义接口类:为防止子类内存泄漏,定义接口的时候,析构函数需要定义成virtual 析构函数。在UML中,斜体代表抽象类和抽象函数(带有抽象函数的类叫抽象类,抽象函数就是纯虚函数)原创 2021-06-25 09:13:57 · 729 阅读 · 1 评论 -
拷贝构造函数和赋值构造函数
拷贝构造和赋值运算符重载原创 2021-06-24 12:01:03 · 72 阅读 · 0 评论 -
C++与C语言区别:在C++中,const修饰的全局变量具有内部链接属性,只能当前文件使用
C++与C语言区别:在C++中,const修饰的全局变量具有内部链接属性,只能当前文件使用;Eg:const int g_test =10;//此时具有内部链接属性int main(){return 0;}如果一定要在其他文件中使用定义的时候加上extern,Eg:extern const int g_test =10;//此时具有外部链接属性int main(){return 0;}C++中的const局部变量,编译器会给优化,解决这个问题可以加上vo...原创 2021-06-24 11:32:12 · 218 阅读 · 0 评论 -
C语言:常量和变量 const---全局const具有外部链接属性,变量都有内存空间
变量----既能读又能写的内存对象,称为变量;一旦初始化不能被修改的对象,称为常量。注意:const修改的变量也叫常量;全局区的const修饰的变量(或者说是全局区的常量),两种修改值的方式都不适用;栈区的const修改的变量(或者说是栈区的常量),可以通过地址修改,所以也叫伪常量。常量分两种:const修饰的常量和字符串常量变量的本质:一段连续内存空间的别名;程序通过变量来申请和命名内存空间;铜鼓哦变量名访问内存空间;不是向变量名读写数据,而是向变量名所..原创 2021-06-24 10:00:25 · 409 阅读 · 0 评论 -
虚析构函数解决调用子类析构函数的问题
如果子类对象中有申请堆内存的操作,需要在析构函数中清理内存;但是在父类指针指向子类对象的时候,delete指针时候发现只调用了父类的析构函数,子类的析构函数没有调用,这样就会造成内存泄露,解决办法:将父类析构函数声明为虚析构函数,然后子类析构函数中清理内存,这样在delete父类指针时候就会调用子类的析构函数了。...原创 2021-06-23 10:56:26 · 682 阅读 · 0 评论 -
纯虚函数virtual void fun()=0;抽象类不能实例化对象
class Animal{ public: virtual void fun()=0;// =0 就是纯虚函数,也叫抽象函数}包含有纯虚函数(抽象函数)的类叫抽象类。(哪怕类里面只有一个抽象函数那也是抽象类);抽象类不能实例化;子类继承抽象类(该抽象类是父类),除非将父类中的全部抽象函数都实现,否则子类依然是抽象类,依然不能实例化对象。(原因:子类继承父类的抽象函数,如果有一个没实现,那对于子类而言就是包含抽象函数的类,所以当然还是抽象类)换言之:如果定义了一个.原创 2021-06-23 10:10:35 · 2608 阅读 · 0 评论 -
多态发生的三个条件
1.有继承;2.重写父类的虚函数;3.父类指针指向子类对象;原创 2021-06-22 13:49:44 · 197 阅读 · 0 评论 -
从一个空项目开始创建DLL导出类 并测试该库
一、创建DLL打开VS2013,文件——》新建——》项目——》二、测试DLL原创 2021-06-21 14:17:27 · 560 阅读 · 0 评论