- 博客(193)
- 资源 (1)
- 问答 (1)
- 收藏
- 关注
原创 网络的基本概念
网络模型OSI层模型、TCP/IP的层模型如下所示:TCP/IP:传输控制协议/网络协议OSI:开放式系统互联TCP/IP各层对应的协议如下所示:由模型可知:IP协议:对应于网络层,是网络层的协议,TCP协议:对应于传输层,是传输层的协议,主要解决数据如何在网络中传输。HTTP协议:对应于应用层,是应用层的协议,主要解决如何包装数据。So
2018-01-29 15:40:38 262
原创 C++11 thread 及互斥锁、条件变量
启动的格式:#include //包含头文件void fucntion();//定义一个线程执行的函数thread t1(fucntion);//线程启动这个函数//一创建就自动运行,主线程非阻塞void factorial(int n,char b,..);//带参数的函数,参数的个数顺延thread t2(factorial,5,'a
2018-01-25 21:25:24 3711
原创 C++进程、线程、多线程概念及线程的优缺点
进程:进程是一个正在执行的程序,是向CPU申请资源的,进程之间数据相互独立,一个进程至少有一个线程。线程:线程是进程中的单一的顺序控制流程也可以叫做最小控制单元,线程是进程中执行单元,开启一个线程比开启一个进程更加节省资源。 多线程:多线程是多任务处理的一种特殊形式,多任务处理允许让电脑同时运行两个或两个以上的程序。一般情况下,两种类型的多任
2018-01-25 21:24:39 4365
原创 堆和栈的主要区别
1申请方式和回收方式 stack: 由系统自动分配。 例如,声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间 heap: 需要程序员自己申请,并指明大小,在c中malloc函数 如p1 = (char *)malloc(10); 在C++中用new运算符 如p2 =
2018-01-23 21:03:20 285 1
原创 程序的内存分配即一个由C/C++编译的程序占用的内存分为以下几个部分
一个由C/C++编译到程序占用的内存分为以下几个部分:1、栈区(stack)——由编译器自动分配释放,在不需要的时候自动清除。用于存放函数的参数、局部变量等。操作方式类似数据结构中的栈(后进先出)。2、堆区(heap)——一般由程序员分配释放,若程序员分配后不释放,程序结束后可能由OS回收。不同于数据结构中的堆,分配方式有些类似链表。3、全局区(静态区)——全局变量和静态变量存
2018-01-23 20:13:24 736
原创 static 全局变量、局部变量、函数与普通全局变量、局部变量、函数区别
全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不
2018-01-23 19:57:51 530
原创 关键字static的作用
static关键字至少有下列n个作用:(1)设置变量的存储域,函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;(2)限制变量的作用域,在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;(3)限制函数的作用域,在模块内的static函数只可被这一模块内的其它函数调用,这个函数
2018-01-23 19:35:43 251
原创 C++ 异常处理详解
捕获异常:捕获异常的语法为:try{// 可能抛出异常的语句}catch(异常类型){// 处理异常的语句}try 和 catch 都是C++中的关键字,后跟语句块,不能省略“{ }”。try 中包含可能会抛出异常的语句,一旦有异常抛出就会被捕获。从“try”的意思可以看出,它只是“尝试”捕获异常,如果没有异常抛出,那就什么也不捕获。catc
2017-12-13 20:57:58 744
原创 C++ String类 详解
string类的构造函数:string(const char *s); //用c字符串s初始化string(int n,char c); //用n个字符c初始化此外,string类还支持默认构造函数和复制构造函数,如string s1;string s2="hello";都是正确的写法。当构造的string太长而无法表达时会抛出length_error异常 ;
2017-12-13 20:52:15 308
原创 C++ 模板
函数模板:所谓函数模板,实际上是建立一个通用函数,它所用到的数据的类型(包括返回值类型、形参类型、局部变量类型)可以不具体指定,而是用一个虚拟的类型来代替(实际上是用一个标识符来占位),等发生函数调用时再根据传入的实参来逆推出真正的类型。这个通用函数就称为函数模板(Function Template)。例://template 模板关键字 返回值类型 函数名 参数列表
2017-12-12 21:29:17 190
原创 C++运算符重载
运算符重载的概念和语法:运算符也是一种函数,所以运算符重载和函数重载一样,同一个运算符可以有不同的功能。运算符重载的格式为:返回值类型 operator 运算符名称 (形参表列){//TODO:}C++运算符重载的规则:1) 并不是所有的运算符都可以重载。能够重载的运算符包括:+ - * / % ^ & | ~ ! = += -
2017-12-11 21:20:45 275
原创 纯虚函数和抽象类
纯虚函数:在C++中,可以将虚函数声明为纯虚函数,语法格式为:virtual 返回值类型 函数名 (函数参数) = 0;纯虚函数没有函数体,只有函数声明,在虚函数声明的结尾加上=0,表明此函数为纯虚函数。最后的=0并不表示函数返回值为0,它只起形式上的作用,告诉编译系统“这是纯虚函数”。抽象类:包含纯虚函数的类称为
2017-12-11 21:17:50 381
原创 浅谈C++多态
什么是多态:多态性即“一个接口,多种方法”,分为静态的多态和动态的多态。静态的多态在编译期间实现,例如函数的重载。动态的多态在程序执行的期间通过虚函数来实现。并且只有在基类指针指向派生类,而且派生类的虚函数遮蔽基类的虚函数(函数原型相同),这个时候调用虚函数(子类的)才能体现多态。几点要求:(1)只需要在虚函数的声明处加上 virtual 关键字,函数定
2017-12-11 21:16:39 180
原创 引用
引用(Reference)是 C++ 相对于C语言的又一个扩充。引用可以看做是数据的一个别名,通过这个别名和原来的名字都能够找到这份数据。引用类似于 Windows 中的快捷方式,一个可执行程序可以有多个快捷方式,通过这些快捷方式和可执行程序本身都能够运行程序;引用还类似于人的绰号(笔名),使用绰号(笔名)和本名都能表示一个人。定义方式:引用的定义方式类似于指针,只是用
2017-11-22 21:50:42 350
原创 友元函数和友元类
一个类中可以有 public、protected、private 三种属性的成员,通过对象可以访问 public 成员,只有本类中的函数可以访问本类的 private 成员。现在,我们来介绍一种例外情况——友元(friend)。借助友元(friend),可以使得其他类中的成员函数以及全局范围内的函数访问当前类的 private 成员。友元函数:在当前类以外定义的、不属于
2017-11-22 21:48:46 275
原创 const 关键字
在类中,如果你不希望某些数据被修改,可以使用const关键字加以限定。const 可以用来修饰成员变量、成员函数以及对象。const 成员变量:const 成员变量的用法和普通 const 变量的用法相似,只需要在声明时加上 const 关键字。初始化 const 成员变量只有一种方法,就是通过参数初始化表。const 成员函数:const 成员
2017-11-22 21:48:16 230
原创 static 静态成员变量和静态成员函数
static静态成员变量:对象的内存中包含了成员变量,不同的对象占用不同的内存,这使得不同对象的成员变量相互独立,它们的值不受其他对象的影响。有时候我们希望在多个对象之间共享数据,对象 a 改变了某份数据后对象 b 可以检测到。在C++中,我们可以使用静态成员变量来实现多个对象共享数据的目标。静态成员变量是一种特殊的成员变量,它被关键字static修饰。
2017-11-22 21:47:52 282
原创 this指针
this定义:this 是 C++ 中的一个关键字,也是一个 const 指针,它指向当前对象,通过它可以访问当前对象的所有成员。例如:void Student::setname(char *name){this->name = name;}void Student::setage(int age){this->age = age;}
2017-11-22 21:47:02 322
原创 构造函数和析构函数
构造函数(Constructor)定义:在C++中,有一种特殊的成员函数,它的名字和类名相同,没有返回值,不需要用户显式调用(用户也不能调用),而是在创建对象时自动执行。这种特殊的成员函数就是构造函数(Constructor)。构造函数的规则:(1)构造函数没有返回值,因为没有变量来接收返回值,即使有也毫无用处,这意味着:(a)不管是声明还是定义,函数名前面
2017-11-22 21:45:49 356 1
原创 类和对象
类是创建对象的模板,一个类可以创建多个对象,每个对象都是类类型的一个变量;创建对象的过程也叫类的实例化。每个对象都是类的一个具体实例(Instance),拥有类的成员变量和成员函数。与结构体一样,类只是一种复杂数据类型的声明(有别于普通数据类型在于类这种数据类型,是一个包含成员变量和成员函数的集合),不占用内存空间(所以在定义类时不能对成员变量进行初始化,因为没有地方存储数据)。而对象是类
2017-11-22 21:44:06 270
原创 浅谈C++内联函数
定义:内联函数(Inline Function)指在函数调用处直接嵌入函数体的函数。即在编译时将函数调用处用函数体替换,类似于C语言中的宏展开,又称内嵌函数或者内置函数。指定方式:在函数定义处(不是声明处)增加 inline 关键字。类体内部定义的函数默认就是内联函数。在类体中定义的成员函数会自动成为内联函数,在类体外定义的不会(如果想让其成为内联函
2017-11-21 22:15:17 480
原创 C 和 C++的比较
C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)即C是面向过程的。C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制及C++是面向过程的。所以C与C++的最大区别在于它们的用于解决问题的
2017-11-21 22:12:06 601
原创 C++继承详解
继承概念: 是一个很简单很直观的概念,与现实世界中的继承类似。可以理解为一个类从另一个类获取成员变量和成员函数的过程。例如类 B 继承于类 A,那么 B 就拥有 A 的成员变量和成员函数。被继承的类称为父类或基类,继承的类称为子类或派生类。派生类除了拥有基类的成员,还可以定义自己的新成员,以增强类的功能。使用的场景: 1) 当你创建的新类与现有的类相似,只是多出若干成员变量或成
2017-11-19 22:50:32 498
转载 GLIBCXX_3.4.9' not found - 解决办法
在RHEL5中安装交叉编译器arm-linux-gcc 4.4.3,然后编译mini2440内核出错: /usr/lib/libstdc++.so.6: version GLIBCXX_3.4.9' not found: 在RHEL5中安装交叉编译器arm-linux-gcc 4.4.3,然后编译mini2440内核出错: /usr/lib/libstdc++.so.6: versionG
2017-11-18 21:42:06 919
原创 C++学习笔记 ---- 重载
与返回值类型无关: void show(int){} int show(int){} 错误,同一个函数至少要两个函数;只有一个函数,调用形参不同做类型转换不是重载
2017-11-18 13:36:53 193
原创 文件编程
#include <stdio.h>#include <string.h>int main(){ FILE *file = fopen("./text1", "a+"); if (NULL == file) { perror("fopen"); fclose(file); return 1; } char* s
2017-11-08 16:04:35 249
原创 实现组合的递归算法
#include <stdio.h>#define true 1#define false 0int num[10]; int visit[10]; void dfs_creat(int index) { int i; if(index == 3) //组合的数的个数 { for (i = 0; i < 3; i++) {
2017-11-07 21:46:54 884
原创 实现全排列的递归算法
#include <stdio.h>#define true 1#define false 0int num[10]; //c++直接定义为 bool visit[10] int visit[10]; void dfs(int index) { int i; if(index == 3) { int i; //存放在
2017-11-07 21:22:30 383
原创 struct和typedef struct
在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu; 声明变量的时候: Stu stu1;(如果没有typedef就必须用struct Student stu1;来声明) 这里的Stu实际上就是struct Student的别名。Stu==struct Student 另外
2017-11-07 17:06:25 250
原创 修改IP地址失败的解决方法
当Windows操作以太网属性下,修改IP地址不能成功时,可以尝试下面这个方法:第一步:找到Windows下命令控制符,右击 以管理员身份运行 第二步:进入后,输入netsh interface ip set address “以太网” static 192.168.1.129 255.255.255.0(IP地址以192.168.1.129为例) 第三步:输入完后,按下回车键即可。
2017-10-29 14:14:43 10686 2
原创 ARM学习笔记--LCD显示
LCD概述: LCD(Liquid Crystal Display),即液晶显示器,是一种采用了液晶控制透光度技术来实现色彩的显示器。LCD有多种类型,比如STN、TFT、LTPS TFT、OLED等。 CPU或显卡发出的图像数据是TTL信号,LCD本身接收的也是TTL信号。由于TTL信号在高速率的长距离传输时性能不佳,抗干扰能力也比较差,后来又提出了多种接口,比如LVDS、T
2017-10-29 13:52:18 3284
原创 ARM学习笔记---中断
中断优先级由高到低51单片机:INT0(P3.2)、TIMER0、INT1(P3.3)、TIMER1、串口中断(P3.0、P3.1)52单片机:TIMER2外部中断下降沿触发内部定时器:TMOD寄存器(M1M0)M1 M0 方式0 0 0 13位0 1 1 16位1 0 2 8 auto1 1 3 两个8位串口{RI->while(RI!)T
2017-10-28 15:28:06 433
原创 ARM学习笔记---串口
串口中断 接收标志RI 发送标志TI4 种串口方式->配置波特率控制器之间发送数据:设置好波特率1.起始位2.数据位3.校验位4.停止位bit 位波特率: 4800bit/s、9600bit/s、115200bit/s ......字节 = 4800/10 (8数据位+起始位+停止位=10)通信方式: UART(串口)、IIC、485
2017-10-28 15:24:48 481
原创 ARM中一些常见英文缩写解释
MSB:最高有效位; LSB:最低有效位; AHB:先进的高性能总线; VPB:连接片内外设功能的VLSI外设总线; EMC:外部存储器控制器; MAM:存储器加速模块; VIC:向量中断控制器; SPI:全双工串行接口; CAN:控制器局域网,一种串行通讯协议; PWM:脉宽调制器; ETM:嵌入式跟踪宏; CPSR:当前程序状态寄存器; SPSR:程序保护状态寄存器;
2017-09-24 21:44:13 1909
原创 嵌入式硬件系统相关知识学习笔记
几个专业名词 app 应用程序 API 应用程序接口 RTOS 实时操作系统 Peripherals 外设 Flash 存储器(闪存) bit 字长 Byte 字节 1 Byte = 8 bit看门狗电路的工作原理? CPU 一直给 WD(Watch
2017-09-24 21:14:55 365
原创 ARM学习笔记(一)
占空比: 高电平占一个周期的百分比串口中的GND作用: 1.保证在同一个电压 2.防止电流回流RTC 即实时时钟 单片机芯片为: 1302通讯协议: UART、IIC、SPI、485 等等ARM的优点: 1、引脚多(IC度高即集成度高) 2、主频高 3、内存大(装操作系统)
2017-09-10 16:35:12 344
原创 关于编译错误--提领指向不完全类型的指针
对于结构体来说虽然所有的变量默认都是公有的,但是,如果想访问里面的成员变量,必须有包含对其结构的定义,否则出现如上的错误,c编译器将无法识别结构里面的变量。一般想操作结构体里的成员变量,都是通过调用结构体中定义的函数接口,来取得结构体中的值,如果想直接访问,在头文件或源文件中加入结构体的定义就行了。
2017-08-12 20:01:47 1209
基于51单片机12864液晶屏的贪吃蛇游戏
2018-03-19
TA创建的收藏夹 TA关注的收藏夹
TA关注的人