自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Ubuntu下安装Python3.5

1. 通过命令行安装Python3.5,执行命令:sudo apt-get install python3.52. 由于Ubuntu底层采用的是Python2.*,Python3与Python2是互不兼容的,但是不能卸载Python2,只需要将默认的Python指向Python3即可。    之前安装的Python3.5默认是安装在/usr/local/lib/python3.5目录下,需要删...

2018-09-15 19:59:12 9134 1

转载 宏定义的使用及注意事项

我在写代码的时候喜欢使用宏,不仅使代码看起来整洁,而且用好了还能极大的减轻编码的工作量,但是如果使用不当的话,出了问题查找起来就就非常的难了,下面的总结大部分是从网上看到的,也有一些是我自己在工作中总结出来的。宏使用中的常见的基础问题1. 防止一个头文件被重复包含#ifndef BODYDEF_H #define BODYDEF_H //头文件内容#endif2

2018-01-21 10:24:19 3206

转载 char类型默认是signed还是unsigned

一直以来在Windows下使用VC编写C/C++程序,用到char类型时默认就认为是signed,没有显式添加过signed,只有在需要无符号类型时才显式加上unsigned。    最近在Android下编写一个C函数,这个函数有一个char类型的形参,本意是可以传递8位有符号数。测试发现每次传递负数进去返回值都不对,调试后发现自己想当然了     下次开发环境变了,要记得看看编译器默认ch

2018-01-18 17:00:57 5576

原创 删除数组中重复出现的字符并只留一个,构成新的数组

方法一:先对数组中的元素进行排序(这里为递增排序),再对重复的元素进行判断删除。代码如下:#includevoid delete(int *a){ int i; int j = 1; int len = sizeof(a)/sizeof(a[0]); for(i = 1; i < len; i++) { if(a[j - 1]

2017-03-07 19:58:58 2216 1

转载 Makefile教程(学好这些足矣)

makefile很重要      什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写make

2017-03-07 11:01:52 431

原创 c++:vector类编写简易通讯录

Function.cpp:通讯录功能实现相关函数#include #include #include "Pon.h"#include "Function.h"extern Tel pon;extern vector t;using namespace std;//-----------返回函数------------//void Function::pause(){

2017-02-27 20:25:56 1115

原创 socket编程中listen和accpet的理解

在服务器端,socket()返回的套接字用于监听(listen)和接受(accept)客户端的连接请求。这个套接字不能用于与客户端之间发送和接收数据。 accept()接受一个客户端的连接请求,并返回一个新的套接字。所谓“新的”就是说这个套接字与socket()返回的用于监听和接受客户端的连接请求的套接字不是同一个套接字。与本次接受的客户端的通信是通过在这个新的套接字上发送和接收数

2017-01-24 12:27:15 877

原创 sizeof和strlen的区别

(1)Sizeof是运算符,strlen是函数(2)Sizeof可以用类型做参数,strlen只能用char*做参数,且必须以“\0”结尾(3)数组做sizeof的参数不退化,做strlen参数退化为指针(4)大部分编译程序在编译的时候就把sizeof计算,strlen的结果要在运行的时候才能计算出来。(5)sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧,strlen

2017-01-16 12:24:06 273

原创 SQL联合查询(内联、左联、右联、全联)

联合查询效率较高.以下例子来说明联合查询的好处t1表结构(用户名,密码)    userid int         username   varchar(20)     password       varchar(20)                                                  1                    jack     

2017-01-15 21:36:20 2926

原创 多进程优缺点

多进程优点:每个进程互相独立,不影响主程序的稳定性,子进程崩溃没关系;通过增加CPU,就可以容易扩充性能;可以尽量减少线程加锁/解锁的影响,极大提高性能,就算是线程运行的模块算法效率低也没关系;每个子进程都有2GB地址空间和相关资源,总体能够达到的性能上限非常大多进程缺点:逻辑控制复杂,需要和主程序交互; 需要跨进程边界,如果有大数据量传送,就不太好,适合小数据

2017-01-07 17:25:11 882

原创 软交换

软交换的概念最早起源于美国。当时在企业网络环境下,用户采用基于以太网的电话,通过一套基于PC服务器的呼叫控制软件(Call Manager、Call Server),实现PBX功能(IP PBX)。对于这样一套设备,系统不需单独铺设网络,而只通过与局域网共享就可实现管理与维护的统一,综合成本远低于传统的PBX。由于企业网环境对设备的可靠性、计费和管理要求不高,主要用于满足通信需求,设备门槛低,许多

2017-01-07 17:17:18 545

原创 IP、端口和网关的作用

ip(网络之间互连的协议):网络之间互连的协议(IP)是Internet Protocol的外语缩写, 中文缩写为“网协”.网络之间互连的协议也就是为计算机网络相互连接进行通信而设计的协议。在因特网中,它是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。任何厂家生产的计算机系统,只要遵守IP协议就可以与因特网互连互通。IP地址具

2017-01-05 22:05:24 1006

原创 递归判断递增数组

用递归算法判断数组是否为一个递增数组bool fun( int a[], int n ){if( n == 1 || n == 0 )return true;if( n ==2 )return a[n-1]>= a[n-2];return fun( a,n-1)&& ( a[n-1] >= a[n-2] );}

2017-01-04 22:04:14 441

原创 串行通信接口RS-232C

1、机械特性RS-232C规定选择DB25结构作为其连接器。DB25由一个25针的插头和一个25孔的插座组成。通常,RTU(数据终端设备)采用DB25针式插头,Modem(数据电路端设备)采用DB25孔式插座。2、电气特性RS-232C接口采用负逻辑工作,即逻辑“1”用负电平(-5~-15V)表示;逻辑“0”用正电平(+5~15V)表示。通常使用时,其门限电平是正负3V,因此许多RS-

2017-01-03 21:41:38 2061

转载 Linux系统启动过程

启动第一步--加载BIOS当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它。这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。在此之后,计算机心里就有谱了,知道应该去读取哪个硬件设备了。启动第二步--读取MBR众所周知,硬盘上第0磁道第一个扇区被称为MBR,也就是Ma

2017-01-02 21:01:03 216

原创 Linux常用指令

显示目录和文件的命令   Ls:用于查看所有文件夹的命令。   Dir:用于显示指定文件夹和目录的命令   Tree: 以树状图列出目录内容   Du:显示目录或文件大小  修改目录,文件权限和属主及数组命令   Chmod:用于改变指定文件的权限命令。   Chown:用于改变文件拥有属性的命令。   Chgrp:用于改变文件群组的命令

2017-01-01 15:08:17 420

原创 数据库与文件的数据存储的区别

文件系统:把数据组织成相互独立的数据文件,实现了记录内的结构性,但整体无结构;而数据库系统实现整体数据的结构化,这是数据库的主要特征之一,也是数据库系统与文件系统的本质区别。在文件系统中,数据冗余度大,浪费存储空间,容易造成数据的不一致;数据库系统中,数据是面向整个系统,数据可以被多个用户、多个应用共享使用,减少了数据冗余。文件系统中的文件是为某一特定应用服务的,当要修改数据的逻辑结构时,必须修改

2017-01-01 12:48:43 2679

原创 将字符串顺序翻转,如: I am转成:am I

#include #include void fanw( char *left,char *right ) //把每个单词单词翻转 { char* pleft = left; char* pright = right; char temp; while( pleft < pright ) { temp

2016-12-31 12:02:22 400 1

原创 指令周期、机器周期、时钟周期

指令周期 :取出并执行一条指令的时间。 机器周期 :又称CPU周期,CPU访问一次内存所花的时间较长,因此用从内存读取一条指令字的最短时间来定义。//机器周期=1/12·振荡周期时钟周期: 通常称为节拍脉冲或T周期。处理操作的最基本单位,即CPU主频。 三者的关系:指令周期通常用若干个机器周期表示,而机器周期又包含若干个时钟周期。

2016-12-29 22:29:21 437

转载 new和malloc的区别

1. malloc()函数1.1 malloc的全称是memory allocation,中文叫动态内存分配。原型:extern void *malloc(unsigned int num_bytes);说明:分配长度为num_bytes字节的内存块。如果分配成功则返回指向被分配内存的指针,分配失败返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。1.2

2016-12-28 21:18:55 171

原创 删除一字符串的出现的字符子串

例如:输入“awsakqabcwsabcee",重复字串为”abc",结果输出为:“awsakqwsee"#include   #include     #define MAX_SIZE 1024    char *filter(char *output,const char *input)  {      if((output == NULL) || (input == NUL

2016-12-27 19:42:21 477

原创 编程:实现对字符串进行循环右移,例如:输入abcdefgh,循环右移34位,输出ghabcdef

例如:输入abcdefgh,循环右移34位,输出ghabcdef#include #include #define MAX_SIZE 1024char *move(char *input,int n){ if(input == NULL) { return NULL; } int i; int len = strlen(in

2016-12-26 19:54:01 1526

原创 前缀、中缀和后缀

它们都是对表达式的记法,因此也被称为前缀记法、中缀记法和后缀记法。它们之间的区别在于运算符相对与操作数的位置不同:前缀表达式的运算符位于与其相关的操作数之前;中缀和后缀同理。举例:(3 + 4) × 5 - 6 就是中缀表达式- × + 3 4 5 6 前缀表达式3 4 + 5 × 6 - 后缀表达式中缀表达式(中缀记法)中缀表达式是一种通用的算术或逻辑公式表示方法

2016-12-25 22:02:32 603

原创 C语言位操作

位操作符1.位与&1、注意:位与符号是一个&,两个&&是逻辑与。2、真值表:1&0=0  1&1=1 0&0=0  0&1=03、从真值表可以看出:位与操作的特点是,只有1和1位于结果为1,其余全是0.4、位与和逻辑与的区别:位与时两个操作数是按照二进制位彼次对应位相与的,逻辑与是两个操作数作为整体来相与的。(举例:0xAA&0xF0=0xA0,0xAA && 0xF0

2016-12-24 22:16:23 553

原创 堆和栈的区别

简单的可以理解为: heap:是由malloc之类函数分配的空间所在地。地址是由低向高增长的。 stack:是自动分配变量,以及函数调用的时候所使用的一些空间。地址是由高向低减少的。 预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据

2016-12-23 21:30:51 211

转载 C语言:枚举类型的使用详解

1. 枚举的定义枚举类型定义的一般形式为:    enum 枚举名{ 枚举值表 };在枚举值表中应罗列出所有可用值。这些值也称为枚举元素。例如:   该枚举名为weekday,枚举值共有7个,即一周中的七天。凡被说明为weekday类型变量的取值只能是七天中的某一天。2. 枚举变量的说明如同结构和联合一样,枚举变量也可用不同的方式说明,即先定

2016-12-21 22:10:33 1607

原创 判断一个数是否为回文字符串

//判断一个数是否为回文字符串 #include int fun(char *str) { int len=strlen(str); int i; for(i=0;i<len;i++) { if(str[i]==(str[len-1])) len--; else

2016-12-20 21:51:31 287

原创 判断一个数是否是2的整数次方

对于判断一个数是否为2的N次方问题,通常想到的最为直接的办法就是对这个数不断对2取余,为0就将该数变为该数除以2,直到最后该数为1为止。void judge(int n){ while(!(n % 2)) { n = n / 2; if(n == 1) { printf("yes!\n);

2016-12-19 22:24:54 1197

原创 青蛙跳台阶问题

一只青蛙一次可以跳上1级台阶,也可以跳上2 级……它也可以跳上n 级,此时该青蛙跳上一个n级的台阶总共有多少种跳法?下面我们有数学归纳法分析一下这个问题: 用Fib(n)表示青蛙跳上n阶台阶的跳法数,青蛙一次性跳上n阶台阶的跳法数1(n阶跳),设定Fib(0) = 1;       当n = 1 时, 只有一种跳法,即1阶跳:Fib(1) = 1;       当n

2016-12-18 19:47:04 330

原创 递归和尾递归

C语言中编译预处理的三种形式的命令:宏定义,文件包含,条件编译命令。1、宏定义主要是:#define,#undef如下:#define PI 3.1415926                    /*不带参数的宏定义*/#define Max(a,b)  a>b?a:b                    /*带参数的宏定义*/说明:宏定义在C语言与C++语言中是相通的。

2016-12-17 22:47:12 229

原创 虚拟空间与地址空间的管理

随着计算机技术的发展,应用程序的规模也随之越来越大,这也就造成了应用程序太大以至于内存容纳不下程序,因此引进了所谓的虚拟内存。对于虚拟内存,其基本思想就是程序、数据、堆栈的总大小可以超过物理内存的大小,操作系统把当前使用的程序段存放在内存中,而未被使用的部分保存在磁盘中。为了有效地对内存进行管理,ARM应用了内存管理单元MMU,它将虚拟地址映射为物理地址,完成虚拟地址到物理地址的重定位。ARM

2016-12-16 22:26:58 295

原创 易犯的错误:C指针指向内存空间的常量区

根据下面语句写出结果:char* s = “AAA”;printf(“%s”, s);s[0] = 'B';printf(“%s”, s);看到上面的短程序,或许我们会觉得显而易见,这里指针s指向了AAA,存放的是AAA的地址,所以第一个打印的结果为AAA,s[0]代表的是指向字符串AAA的首地址,所以会觉得第二个打印的结果就是BAA,即将第一个字符更改为了B。然而在将上面的程序

2016-12-15 21:53:34 365

转载 IIC协议总结

面试的时候主要会遇到的IIC问题如下介绍一下你了解的I2C?I2C总线是飞利浦(PHLIPS)公司推出的一种串行总线,用于连接微控制器及其外围设备, I2C串行总线有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。 它仅通过两根信号线就可以完成对所有挂载在I2C总线上的从器件进行操作。这样的好处是可以大大的节省我们微处理器的IO口资源。I2C到底可以挂载多少个器件

2016-12-14 22:11:25 407

原创 联合体判断机器为大端字节序还是小端字节序

联合体union的存放顺序是所有成员都从低地址开始存放,而且所有成员共享存储空间#include union temp { short int a; char b; }temp;int main(){ temp.a = 0x1234; if( temp.b == 0x12 )//低字节存的是数据的高字节数据 { printf(

2016-12-13 21:04:55 924

原创 用联合体判断机器是大端字节序还是小端字节序

联合体union的存放顺序是所有成员都从低地址开始存放,而且所有成员共享存储空间#include union temp { short int a; char b; }temp;int main(){ temp.a = 0x1234; if( temp.b == 0x12 )//低字节存的是数据的高字节数据 { printf(

2016-12-13 20:58:50 632

原创 unsigned和signed间的转换

1、#include int main(int argc, char *argv[]){ unsigned short a = -1; short b = a; printf("%d %d",a,b); return 0;}结果:65535  -1在计算机中,负数是以补码来存储的。htmlC语言中常量整数 -1的补码表示为0xFFF

2016-12-12 22:20:19 2545

原创 编程实现蛇形输出

实现如下的蛇形输出:1    2    3   4   516 17 18 19 615 24 25 20 714 23 22 21 813 12 11 10 9 具体代码实现:#include #include int main(){int n;int x,y,round;//a[x][y],x是二维数组的第一个下标,y是二维数组的第二个下

2016-12-11 20:27:47 529

转载 汇编的压栈(PSHM)和出栈(POPM)

汇编里把一段内存空间定义为一个栈,栈总是先进后出,栈的最大空间为64K 比如把内存中的 10000H 到 1000FH 这段内存空间定义为一个栈,那么就需要执行如下汇编mov ax,1000Hmov ss,axmov sp,0010H这样设置了SS为1000H ,SP为0010,栈的指针执行1000:0010 也就是 10010H,这个地址是段地址的

2016-12-10 21:57:56 4425

原创 TCP的三次握手四次挥手

TCP三次握手所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息.在socket编程中,客户端执行connect()时。将触发三次握手。第一次握手: 客户端发送一个TCP的SYN标志位置1的包指明

2016-12-09 21:12:21 319

原创 select函数:I/O多路复用

I/O 多路复用阻塞函数在完成其指定的任务以前不允许程序继续向下执行。如:当服务器运行到accept语句时而没有客户端请求连接,服务器就会停止在accept语句上等待连接请求的到来,这种情况称为堵塞,而非堵塞操作则可以立即完成。如:如果你希望服务器仅仅检查是否有客户在等待连接,有就接受连接,否则就继续做其他的事情,则可以通过使用select系统调用来实现,除此之外,select还可以同时监听多

2016-12-08 21:34:36 263

空空如也

空空如也

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

TA关注的人

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