自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++函数重载---底层实现原理

C++编写的代码,若去调用C编出来的库,是行不通的,因为C代码编译并不会发生命名倾轧行为,而C++代码编译会产生命名倾轧行为,所以函数名不匹配,则无法调用到C库中的函数。所以加入两个函数名相同的函数在编译之后的函数名也照样相同;消除倾轧的方法,在C++代码包含C库的头文件,加入extern “C”。总之一句话,倾轧是C++为了实现函数重载而设计的,不倾轧的extern “C”则是为了兼容C而后实现的。在.cpp文件中,虽然两个函数的函数名一样,但是他们在符号表中生成的名称不一样。

2020-06-24 14:47:57 1758

原创 C到C++学习感悟---对比学习

面向过程就是分析并解决问题,并将解决问题的步骤一步一步的实现,使用时依次调用就行;面向对象就是把问题分解成各个对象,建立对象的目的不是为了完成某一个步骤,而是为了描述某个事物在整个问题的步骤中的行为

2020-06-24 13:09:50 393

原创 关于malloc(0)的对与错

当malloc分配内存时它除了分配我们指定SIZE的内存块,还会分配额外的内存来存储我们的内存块信息,用于维护该内存块。

2020-06-23 22:57:10 467

转载 Android心得4.3--SQLite数据库--execSQL()和rawQuery()方法

1.   除了可以使用文件或SharedPreferences存储数据,还可以选择使用SQLite数据库存储数据。在Android平台上,集成了一个嵌入式关系型数据库—SQLite,SQLite3支持 NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BL...

2020-06-01 15:50:07 702

原创 Makefile学习总结

      一个工程中的源文件不计其数,按其功能、类型、模块放在若干个目录中,makefile定义了一系列的规则来指定,那些文件需要先编译,那些文件需要后编译,以及那些文件需要重新编译,甚至更复杂的功能操作。       makefile的优势是“自动化编译”,一旦写好,只需一个make指令,整个工程自动编译,极大地提高了软件开发效率。make是一个解释makefile中指令的一个命令工具。1、特殊的符号  &

2020-05-25 20:37:09 313

原创 五笔输入法

五笔输入法:横: G:王旁青头戋(兼)五一 F:土士二干十寸雨 D:大犬三羊古石厂 S:木丁西 A:工戈草头右框七 竖: H:目具上止卜虎皮 J:日早两竖与虫依 K:口与川,字根稀 L:田甲方框四车力 M:山由贝,下框几 撇: T:禾竹一撇双人立,反文条头共三一 R:白手看头三二斤 E:月彡(衫)乃用家衣底 W:人和八,登祭三四里 Q:金勺缺点无尾鱼,犬旁...

2019-11-17 16:36:21 307

原创 Linux网络编程---IO复用之select函数

1、概念: select机制提供了一个数据结构 struct fd_set,可以理解为一个集合,实际上是一个位图,每一个特定位代表一个相应的文件描述符,即文件句柄。fd_set集合可以通过一些宏由人为来操作。2、函数原型:#include <sys/time.h>#include <sys/types.h>#include <unistd.h>int...

2019-10-30 18:51:48 99

原创 Linux网络编程---IO复用之poll函数

函数原型#include <poll.h> int poll(struct pollfd *fds, nfds_t nfds, int timeout);struct pollfd { int fd; /* file descriptor */ 文件描述符 short events; /* requested events */ 请求...

2019-10-30 11:20:31 341

原创 Ubuntu 16.04 source list

Aliyun 亲测管用deb http://mirrors.aliyun.com/ubuntu/ xenial main restricteddeb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricteddeb http://mirrors.aliyun.com/ubuntu/ xenial universedeb ...

2019-10-29 09:40:43 1270

原创 Linux就该这样学

Linux文件存储结构:一个文件由目录项、inode、数据块组成目录项:包含文件名和inode节点号inode:文件索引点,除文件名以外的属性,以及数据块的指针数据块:文件的具体内容第一组:ls 查看属性mv 移动或重命名cp 复制文件rm 删除文件第二组:cat 显示文件 -A显示隐藏字符head 显示文件头几行tail 显示文件末几行less/more 分屏显...

2019-10-28 14:21:14 220

原创 简单TCP通信模型

 在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识网络通讯中的一个进程,“IP地址+端口号”就称为socket。int socket(int domain, int type, int protocol); 成功文件描述符,失败-1流式套接字:非帧同步数据报套接字:帧同步htonl()、htons() 主机字节序转换成网络字节序ntohl()、ntohs() 网络字...

2019-10-28 14:05:39 598

转载 STM32的IWDG使用

关于独立看门狗,很简单,打开喂狗,就这么简单,很多书上讲了很多什么寄存器什么的,对于初学者而言,这些还不是很重要,重要的是先学会用,用了之后慢慢去消化,为什么这东西要这么设置。好了下面来看看我的程序,很简单:void Iwdg_Init(void){IWDG_WriteAccessCmd(IWDG_Wr...

2019-05-08 19:57:37 841

原创 浅谈对select函数的理解

  select机制中提供了一个数据结构 struct fd_set,可以理解为一个集合,实际上是一个位图,每一个特定位代表一个相应的文件描述符,这个集合中存放的是文件描述符,即文件句柄。fd_set集合可以通过一些宏由人为来操作,程序员通过4类宏,来完成对fd_set的操作<1> FD_ZERO(fd_set*) 清空一个文件描述符集合<2>FD_SET(int, ...

2019-04-23 12:23:53 335

转载 数据帧、数据包、数据报三者区分

首先我们有清楚,信息交换是发生在OSI模型中的相同层面,即:等层信息交换,源机中每一层都把信控制信息附加在数据中,而目的机器的每一层都会都接收到的信息进行分析,并从数据中移除控制信息在开始之前,需要先了解一下什么是数据单元?数据单元(data unit)是网络信息传输的基本单位。一般网...

2019-04-21 14:42:52 1776

转载 数据帧、数据包、数据报以及数据段 详解

数据帧、数据包、数据报以及数据段 OSI参考模型的各层传输的数据和控制信息具有多种格式,常用的信息格式包括帧、数据包、数据报、段、消息、元素和数据单元。 信息交换发生在对等OSI层之间,在源端机中每一层把控制信息附加到数据中,而目的机器的每一层则对接收到的信息进行分析,并从数据中移去控制信息,下面是各信息单元的说明:数据帧(Frame):是一种信息单位,它的起始点...

2019-04-21 14:15:17 5419

原创 MAC地址和IP地址的区别

基础知识  标识网络中的一台计算机,一般至少有三种方法,最常用的是域名地址、IP地址和MAC地址,分别对应应用层、网络层、物理层。网络管理一般就是在网络层针对IP地址进行管理,但由于一台计算机的IP地址可以由用户自行设定,管理起来相对困难,MAC地址一般不可更改,所以把IP地址同MAC地址组合到一起管理就成为常见的管理方式。一. 什么是MAC地址 MAC地址就是在媒体接入层上使用的地址,也叫...

2019-04-20 13:54:30 13730 6

翻译 select 函数在 socket 通信中的作用

1.函数原型int select(int n,fd_set * readfds,fd_set * writefds,fd_set * exceptfds,struct timeval * timeout);2.函数说明 select()用来等待文件描述词状态的改变。参数n代表最大的文件描述词加1,参数readfds、writefds 和exceptfds 称为描述词组,是用来回传该描述词的读...

2019-04-19 15:03:32 202

原创 C&&C++ 笔试常见关键字

volatile:防止变量被优化  <1>当读取一个变量时,为提高存取速度,编译器优化时会先把变量读取到一个寄存器中;以后取变量时,就直接从寄存器中取值  <2>用volatile声明的变量表示该变量可能随时发生变化,与该变量有关的运算,直接从变量的地址处取值  static:  <1>默认初始化为0  <2>延长了局部变量的生命周期,...

2019-04-15 13:57:43 227

原创 stm32定时器的配置步骤

STM32F1定时器介绍:   由两个基本定时器(TIM6、TIM7),4个通用定时器(TIM2—TIM5),2个高级定时器(TIM1、TIM8);基本定时器结构功能简单,类似于51单片机中的定时器,通用定时器在基本定时器基础上扩展而来,增加了输入捕获和输出比较等功能,高级定时器在通用定时器的基础上扩展而来,增加了可编程死区互补输出、重复计数器、带刹车(断路)功能。通用定时器的配置步骤:&l...

2019-04-10 19:02:46 9241

原创 系统时钟 SysTick

什么是 SysTick?CM3的内核中包含一个SysTick时钟。SysTick为一个24位的递减计数器,SysTick设定初值并使能后,每经过1个系统时钟周期,计数值就减1。当计数到0后,SysTick计数器自动重装初值并继续计数,同时内部的COUNTFLAG标志会被置1,触发中断。中断响应属于NVIC异常,异常号为15SysTick定时器寄存器<1> CTRL 寄存器CTR...

2019-04-07 13:00:18 2308

原创 运算符的重载

将运算符重载为类的成员函数,一般形式为:class 类名{ //类体   ………  返回类型 operator 运算符号(形式参数列表)  {      函数体  }  ……};当运算符重载为成员函数时,运算符函数的形式参数的个数比运算符规定的运算对象个数少一个。因为是类的非静态成员函数都有一个隐含的this指针,运算符函数可以用this指针隐式的访问类对象的成员,因...

2019-04-06 11:51:20 345

原创 指向类的成员的指针

  在C++语言中,指向类的成员的指针包括指向类的数据成员和成员函数这两种指针。例如,有如下一个类:class A{ public: int fun(int b){ return a*c+b; } A(int i){ a = i; } int c; private: int a;};1.定义一个指向类A的数据成员c的指针pc,格式如下:in...

2019-04-05 19:38:04 215

原创 静态联编和动态联编的差异

静态联编:  在编译阶段将函数实现和函数调用绑定起来称为静态联编,C语言中,所有联编都是静态联编,C++ 一般情况下也是静态联编

2019-04-04 13:09:34 670

原创 C++学生管理系统 数据同步数据库

编写代码前,首先配置一下项目属性,具体见此链接源代码:#include <Windows.h>#include <mysql.h>#include <iostream>#include <iomanip>using namespace std;void mysql_test(); //进入学生系统void mysql_inse...

2019-04-03 22:50:31 5916 4

原创 多继承的“二义性”问题

一般来说,在派生类中对基类成员的访问应该是唯一的,但是,由于在多继承情况下,可能出现对基类中某个成员的访问不唯一性情况,这称为对基类成员访问的多继承二义性问题分两种情况:first: 派生类的多个基类中调用其同名成员时可能出现二义性second:派生类有共同基类时访问公共基类成员可能出现二义性例子:#include <iostream>using namespace std...

2019-04-03 14:27:29 1265

原创 vs2013连接mysql

源代码:#include <Windows.h>#include <mysql.h>#include <iostream>using namespace std;int main(){ MYSQL mysql; MYSQL_RES *res; MYSQL_ROW row; mysql_init(&mysql); if (!m...

2019-04-02 23:48:01 760

原创 “vector” 中的 “iterator”

Vector and Iterator  向量vector是C++标准模板库中的内容。vector是一个容器,他能够存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,可以动态改变大小,使用向量时需要在程序中添加< vector>头文件  所有的标准库容器类都定义了相应的iterator容器,如vector, vector::iterator iter; ...

2019-04-02 19:58:17 9478

原创 C++类模板(新手必备)

为什么要定义类模板呢先看一个例子:两个数求和#include <iostream>using namespace std;class Test{ public: Test(int a, int b) { x = a; y = b; } int add() { return (x + y); } privat...

2019-04-01 21:34:05 303

原创 深拷贝与浅拷贝的异同

默认的拷贝构造函数  如果一个类中没有定义拷贝构造函数,则系统会自动提供一个默认拷贝构造函数,用来根据已有对象创建新对象;我们要知道这个默认的拷贝构造函数采用的是"浅拷贝“,并非"深拷贝“。深拷贝与浅拷贝的区别浅拷贝只是对指针的拷贝,拷贝后两个指针指向同一个内存空间;深拷贝不仅对指针拷贝,对指针指向的内容也进行拷贝,深拷贝后的两个指针分别指向不同的内存空间浅拷贝带来的问题1. 浅拷贝后的...

2019-04-01 18:15:56 339

原创 浅谈 文件IO和标准IO

基本概念文件IO: 不带缓冲区的IO,每一次read,write都调用内核中的一个系统调用,称之为低级IO,操作系统提供的基本IO服务,与OS绑定,特定于Linux和Unix平台标准IO: 标准IO处理了很多细节,对文件IO进行了封装,可移植性高,提供缓冲区(全缓冲、行缓冲、不带缓冲)区别: 通过文件IO读写文件时,会频繁的进行系统调用,这样就增加了系统的开销;而标准I/O可以看成是在文件I...

2019-03-31 23:06:17 502

原创 指针和引用的区别和联系

指针的优势<1>动态分配内存<2>可以实现址传递<3>方便处理字符串<4>高效的使用数组指针和引用的区别本质区别:指针是地址,引用是别名 1. 指针可以改变它所指向的值,而引用一旦与某个变量绑定后就不再改变2. 系统给指针分配内存空间,不给引用分配内存空间3. 引用不能为空,指针可以为空代码如下:#include <ios...

2019-03-31 20:46:46 349

原创 浅谈 C++“引用”

变量的引用引用:就是给某一变量起个别名,对引用的操作等价于对变量的操作引用的声明方法:类型标识符 &引用名 = 目标变量名例如:char ch;char &p = ch;<1>引用仅是变量的别名,而不是定义了一个变量,因此不占用内存空间,而是和目标变量共同指向目标变量的内存地址<2>表达式中的取地址符&不再是取变量的地址,而是用来表示该...

2019-03-31 19:17:10 213

原创 Linux下静态库和动态库的生成

1.何为静态库……何为动态库……?Windows下:.dll 是动态库 .lib是静态库Linux下: .so是动态库 .a是静态库 静态库: 在生成可执行程序的时候,会把函数的具体执行方式封装到程序中,程序体积比较大,只要能编译成功,就可以在任意相同的平台上运行动态库:在生成可执行程序的时候,只会把函数的接口封装到程序中,体积较小,在程序开始运行时,才调用函数的具体执行...

2019-03-31 15:46:31 182

原创 C++ 利用new和delete创建和释放动态数组

创建并释放一维数组#include <iostream>using namespace std;int main(){ int n; cin >> n; int *arr = new int[10];//分配一维数组 for (int i = 0; i < n; i++) cin >> arr[i]; for (int i = 0...

2019-03-31 13:45:11 388

原创 用 "指针" 指向二维数组

常规法:数组指针:int a[2][3] = { 1, 2, 3, 4, 5, 6 }; for (int i = 0; i < 2; i++) for (int j = 0; j < 3; j++) cout <<*(a[i]+j)<< endl;//*(a[i]+j)等价于*(*(a+i)+j)指针法:定义行指针:类型标识符 (*指针变...

2019-03-31 12:44:31 2570

原创 C++ new和delete malloc和free详解

先说一下两者的区别1.属性new/delete是C++关键字,需要编译器支持malloc/free是库函数,需要头文件支持2.参数使用new申请内存空间时无需指定内存块的大小,编译器会根据类型信息自行计算;而malloc则需要显式的指出所需内存的尺寸3.返回类型new申请成功时返回与对象类型相同的指针,无须进行类型转换;而malloc内存分配成功时返回void * ,需要通过强制类型...

2019-03-31 10:37:21 425

翻译 Linux内核结构体container_of的宏定义

container_of宏定义#define offsetof(TYPE,MEMBER)((size_t)&((TYPE*)0)->MEMBER)#define XXX(ptr,type,member)({\ const typeof(((type*)0)->member)*__mptr=(ptr);\ (type*)((char*)__mptr – off...

2019-03-31 00:18:23 265

原创 C++ 生成随机数

C++借助 rand() 和 srand() 函数产生随机数,由于rand()函数内部实现的是用线性同余法做的,所以生成的并不是真正的随机数,而是在一定范围内可看为随机数的伪随机数rand()单纯的rand()函数会返回一个随机数,不过它是一次性的,因为系统默认的随机数种子为1,只要随机数种子不变,其生成的随机数序列就不会改变srand()srand()可用来设置rand()产生随机数时的...

2019-03-30 22:29:35 287

空空如也

空空如也

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

TA关注的人

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