自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 static

全局静态变量:该变量在全局数据区分配内存;未经初始化的静态全局变量会被程序自动初始化为0(在函数体内声明的自动变量的值是随机的,除非它被显式初始化,而在函数体外被声明的自动变量也会被初始化为0);静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的;静态变量都在全局数据区分配内存,包括后面将要提到的静态局部变量。对于一个完整的程序,在内存中的分布情况如下图:代码区

2016-09-01 21:34:07 436

原创 string类的写时拷贝与引用计数

由于浅拷贝使多个对象共用一块内存地址,调用析构函数时导致一块内存被多次释放,导致程序奔溃。实现string类的时候通常显示的定义拷贝构造函数和运算符重载函数。由于释放内存空间,开辟内存空间时花费时间,因此,在我们在不需要写,只是读的时候就可以不用新开辟内存空间,就用浅拷贝的方式创建对象,当我们需要写的时候才去新开辟内存空间。这种方法就是写时拷贝。在构造函数中开辟新的空间时多开辟4个字节的空

2016-08-31 11:19:56 693 1

转载 c++之pair

Pair类型概述pair是一种模板类型,其中包含两个数据值,两个数据的类型可以不同,基本的定义如下: pair a;表示a中有两个类型,第一个元素是int型的,第二个元素是string类型的,如果创建pair的时候没有对其进行初始化,则调用默认构造函数对其初始化。 pair a("James", "Joy");也可以像上面一样在定义的时候直接对其初始化。 由于p

2016-08-26 22:19:17 696

原创 二叉树中找两个结点的最近公共祖先结点

一、搜索二叉树:第一变种是二叉树是一种特殊的二叉树:查找二叉树。也就是树是排序过的,位于左子树上的结点都比父结点小,而位于右子树的结点都比父结点大。我们只需要从根结点开始和两个结点进行比较。如果当前结点的值比两个结点都大,则最低的共同父结点一定在当前结点的左子树中。如果当前结点的值比两个结点都小,则最低的共同父结点一定在当前结点的右子树中。(45)二、三叉链(可以找到父节点):遍历4节

2016-08-25 20:34:59 10052 1

原创 内存字节对齐

上面是你随便 google一下,人家就可以跟你解释的,一大堆的道理,我们没怎么多时间,讨论为何要对齐.直入主题,怎么判断内存对齐规则,sizeof的结果怎么来的,请牢记以下3条原则:(在没有#pragma pack宏的情况下,务必看完最后一行)1:数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要

2016-08-16 16:12:08 349

原创 选择排序及改进方法

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。简单选择排序:对比数组中前一个元素跟后一个元素的大小,如果后面的元素比前面的元

2016-08-15 20:05:08 5361 1

原创 read( )函数注意事项与不足

今天在练习使用dup文件描述符重定向时,从标准输入流读取数据时同时练习了read()函数和fgets()函数,因为以前没有过多使用过read()函数,所以出现了一想不到的错误,刚开始调了半天才发现是read()函数的错误。为了防止以后有不熟悉read()函数的同学在使用过程中再出错,所以今天我们来解析一下read()函数。如有不足的地方请大家指出。先说出结果吧:个人觉得循环中最好不要用read

2016-08-13 00:38:35 8192 1

原创 exec函数族实例解析

摘录自《深入浅出Linux工具与编程》(1)exec函数说明fork()函数通过系统调用创建一个与原来进程(父进程)几乎完全相同的进程(子进程是父进程的副本,它将获得父进程数据空间、堆、栈等资源的副本。注意,子进程持有的是上述存储空间的“副本”,这意味着父子进程间不共享这些存储空间。linux将复制父进程的地址空间内容给子进程,因此,子进程有了独立的地址空间。),也就是这两个进程做

2016-08-11 21:04:33 1524

转载 HTTP协议的“无连接,无状态”特点

是一个属于应用层的面向对象的协议,HTTP 协议一共有五大特点:1、支持客户/服务器模式;2、简单快速;3、灵活;4、无连接;5、无状态。无连接无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。早期这么做的原因是 HTTP 协议产生于互联网,因此服务器需要处理同时面向全世界数十万、上百万客户端的网页访问,

2016-08-11 20:38:52 714

原创 详解Linux中CentOS6.8下解压安装mysql-5.7.14

环境:centos6.8 32位本教程安装MySQL是通过编译过的二进制文件进行安装。是不针对特定平台的通用安装方法,使用的二进制文件是后缀为.tar.gz的压缩文件1、下载 http://dev.mysql.com/downloads/mysql/2、解压缩到/usr/local/下面,mysql的主目录命名为mysql[root@localhost local]# mkdi

2016-08-11 20:04:09 4997 1

原创 函数调用过程原理及栈帧分析

一、栈帧栈帧:“栈帧也叫过程活动记录,是编译器用来实现过程/函数调用的一种数据结构。实际上,可以简单理解为:栈帧就是存储在用户栈上的(当然内核栈同样适用)每一次函数调用涉及的相关信息的记录单元。我们从栈开始来理解什么是栈帧,首先必须明确一点也是非常重要的一点,栈是向下生长的,所谓向下生长是指从内存高地址->低地址的路径延伸,那么就很明显了,栈有栈底和栈顶,那么栈顶的地址要比栈底低。对x

2016-08-09 22:34:52 2220

原创 sizeof和strlen区别详解

"引自百度百科"strlenstrlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含'\0')。sizeof C语言中判断数据类型或者表达式长度符;不是一个函数,字节数的计算在程序编译时进行,而不是在程序执行的过程中才计算出来!

2016-08-09 20:46:37 5657

转载 const实现机制及与#define的区别

const与#define的区别(1) 编译器处理方式不同  define宏是在预处理阶段展开。  const常量是编译运行阶段使用。(2) 类型和安全检查不同  define宏没有类型,不做任何类型检查,仅仅是展开。  const常量有具体的类型,在编译阶段会执行类型检查。(3) 存储方式不同  define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存

2016-08-08 17:21:55 2162 2

转载 详解栈区、堆区、全局区、文字常量区、程序代码区

一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(static)—,全局变

2016-08-08 17:06:25 19226 4

转载 Linux 内存映射函数 mmap()函数详解

mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。mmap在用户空间映射调用系统中作用很大。头文件 函数原型void* mmap(void* start,size_t length,int prot,int flags,int fd,off_t offset);int munmap(void* st

2016-08-07 00:01:11 108966 2

原创 端口号及分类

端口号 在网络技术中,端口(Port)包括逻辑端口和物理端口两种类型。物理端口指的是物理存在的端口,如ADSL Modem、集线器、交换机、路由器上用 于连接其他网络设备的接口,如RJ-45端口、SC端口等等。逻辑端口是指逻辑意义上用于区分服务的端口,如TCP/IP协议中的服务端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等。由于物理端口和逻辑端口

2016-08-06 23:40:03 1804

转载 TCP协议三次握手四次挥手

一、TCP报文格式TCP报文格式图:上图中有几个字段需要重点介绍下:(1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。(2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。(3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:(A)U

2016-08-04 23:19:28 346

原创 CentOs下telnet --安装配置开启

Centos(6.7测试)下telnet的安装与配置一.查看本机是否有安装telnet(全程root下操作)检查是否已经安装telnet   #rpm -qa | grep telnet如果显示结果为:telnet分为telnet-client (简称为telnet)和telnet-server。如果显示第一行证明telnet-client已经安装。第二行显示为

2016-08-04 22:59:32 1362

原创 Linux下安装git

1.CentOs6.5下安装git:在CentOS5的时代,由于yum源中没有git,所以需要预先安装一系列的依赖包。但在CentOS6的yum源中已经有git的版本了,可以直接使用yum源进行安装。$ sudo yum install git但是yum源中安装的git版本是1.7.1,太老了,Github等需要的Git版本最低都不能低于1.7.2 。所以我们一般不用上面的方法

2016-08-04 00:10:10 415

原创 八大排序之堆排序

#pragma oncevoid AdjustDown(int*a,size_t size, size_t parent){ size_t child = parent * 2 + 1; while (child < size) { if (child + 1 a[child]) { child++; } if (a[child]>a[parent]) {

2016-08-02 22:21:13 237

原创 八大排序算法之插入排序

#pragma oncevoid ShellPort(int *a, int size){ for (int gap = size / 2; gap > 0; gap=gap/2) { for (int i = 0; i < gap; i++) { for (int j = i + gap; j < size; j = j + gap) { if (a[j] <

2016-08-02 22:18:48 241

转载 Eclipse常用快捷键

编辑快捷键  【ALT+/】 显示代码提示,以及代码自动补全功能。  【Ctrl+/】 添加注释  【Ctrl+D】 删除当前行   窗口快捷键  【Ctrl+M】 窗口最大化和还原   查看和定位快捷键     1. 【Ctrl+K】、【Ctrl+Shift+K】    快速向下和向上查找选定的内容,从此不再需要用鼠标单击查找对话框了。  

2016-06-10 21:01:46 231

转载 Java中获取键盘输入值的三种方法

程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值的现成函数!Java没有提供这样的函数也不代表遇到这种情况我们就束手无策,请你看以下三种解决方法吧:  以下将列出几种方法:  方法一:从控制台接收一个字符,然后将其打印出来  public static void main(S

2016-06-10 21:00:15 371

转载 常见的操作系统进程调度算法

一、先来先服务和短作业(进程)优先调度算法1.先来先服务调度算法先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的

2016-06-06 22:41:38 811

转载 详解Linux中的进程描述符task_struct

进程是处于执行期的程序以及它所管理的资源(如打开的文件、挂起的信号、进程状态、地址空间等等)的总称。注意,程序并不是进程,实际上两个或多个进程不仅有可能执行同一程序,而且还有可能共享地址空间等资源。Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程,这个结构体包含了一个进程所需的所有信息。它定义在linux-2.6.38.8/include/linux/sche

2016-06-05 17:15:45 4956

原创 linux下C/C++实现进度条(使用make/makefile)

实现一个简单的进度条,动态展示解压或下载进度。需要实现的功能:打印动态增长的字符串用来显示进度(每次都在同一行覆盖输出字符串,不换行,需要使用\r)动态增长的百分比反应百分比。一个动态字符反映这个进度条是否工作。#include #include#includevoid progress(){char progress_bar[102];memset(progress_

2016-06-05 00:21:31 1864

转载 Linux下开发环境(gcc/g++/makefile/gdb)

先决条件gcc 这是c语言的编译器从前,我写了一个Linux多线程到程序Main.c,使用gcc -g Main.c -lpthread -o Main编译,就出现来未安装gcc的提示,我按照提示输入来几个y,然后就把gcc装好了。但是,其实,在Red Hat Enterprise Linux 6上,默认已经安装好gcc,可以编译C语言程序了。gcc-c++ 扩展为c++编译器

2016-06-04 23:37:51 1031

转载 Centos配置国内yum源

网易(163)yum源是国内最好的yum源之一 ,无论是速度还是软件版本,都非常的不错,将yum源设置为163yum,可以提升软件包安装和更新的速度,同时避免一些常见软件版本无法找到。具体设置方法如下:1,进入yum源配置目录cd /etc/yum.repos.d2,备份系统自带的yum源mv CentOS-Base.repo CentOS-Base.repo.bk下载163网

2016-05-29 20:43:59 394

转载 Linux下安装gcc 、g++ /gfortran编译器

一、ubuntu下gcc/g++/gfortran的安装1.安装(1).gccubuntu下自带gcc编译器。可以通过“gcc -v”命令来查看是否安装。(2).g++安装g++编译器,可以通过命令“sudo apt-get install build-essential”实现。执行完后,就完成了gcc,g++,make的安装。build-essential是一整套工具

2016-05-29 20:41:49 20176 1

原创 Linux之编辑器vim配置

Linux下编程一直被诟病的一点是: 没有一个好用的IDE, 一个好用的IDE是何等的重要啊, 估计很多人就是卡在这个门槛上了, "工欲善其事, 必先利其器"嘛, 我今天教大家把vim改装成一个简易IDE, 说它"简易"是界面上看起来"简易", 但功能绝对不比一个好的IDE差, 该有的功能都有, 不该有的功能也有, 下面开始介绍今天的工作.本文会教你:1. 中文帮助手册的安装2.

2016-05-27 15:48:32 3375

原创 大端小端存储的含义及判断

大端模式所谓的大端模式(Big-endian),是指数据的高字节,保存在内存的低地址中,而数据的低字节,保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;例子:0000430: e684 6c4e 0100 1800 53ef 0100 0100 00000000440: b484 6c4e 004e ed00 000

2016-05-23 22:06:25 562

转载 细说new与malloc的10点区别

new与malloc的10点区别: 1.申请的内存所在位置new操作符从自由存储区(free store)上为对象动态分配内存空间,而malloc函数从堆上动态分配内存。自由存储区是C++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该内存即为自由存储区。而堆是操作系统中的术语,是操作系统所维护的一块特殊内存,用于程序的内存动态分配,C语言使用malloc从堆上分配内存

2016-05-20 22:11:04 312

原创 斐波那契数列

斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”。斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657 。特别指出:第0

2016-05-20 16:16:08 542

原创 linux中find指令详解

find是linux 命令,它将档案系统内符合 expression 的档案列出来。Linux下find命令提供了相当多的查找条件,你可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find 根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。       由

2016-05-16 22:41:01 521

原创 C++实现内存复制函数(memmove解决内存重叠)

memmove函数用于从src拷贝count个字符到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。但复制后src内容会被更改。当dest指向count区域时,目标区域和源区域有重叠,从目标区域复制3到dest时会覆盖源区域的5,复制以后结果因此发生存在区域重叠时采用逆向复制void* my_memmov

2016-04-16 22:23:31 7978 1

原创 C++实现 一个数组实现两个栈

一个数组实现两个栈(两种方法)1.数组两边作栈底,往中间走走#pragma once#define MAX_SIZE 8typedef int DataType;template //模板类class DoubleStack{public: DoubleStack() :_top1(0), _top2(MAX_SIZE-1) { _array = new

2016-04-08 23:39:40 1485

原创 打印1到最大的n位数 题目:输入数字n,按顺序打印出从1最大的n位十进制数。

面试题:打印1到最大的n位数题目:输入数字n,按顺序打印出从1最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999。跳进面试官陷阱这个题目看起来很简单。我们看到这个问题之后,最容易想到的办法是先求出最大的n位数,然后用一个循环从1开始逐个打印。解决这个问题需要表达一个大数。最常用也是最容易的方法是用字符串或者数组表达大数。接下来我们用字符串来解决大数问题。用字符串表示数字的

2016-04-05 22:46:41 1106

原创 C语言实现 求10 个整数中最大值

#include "stdio.h"void main(){ int num[10]; int max,i,j;     for(i=0;i    {     printf("请输入第%d个数: ",i+1);        scanf("%d",&num[i]);    }    max=num[0];    for(j=1;j    {     if(num[j]>max)        ma

2016-04-05 22:46:35 661

原创 C语言实现 &nbsp; 不允许创建临时变量,交换两个数的内容

#include "stdio.h"void main(){ int a=1,b=2; a=a^b; b=a^b; a=a^b; printf("a=%d\n",a); printf("b=%d\n",b);}

2016-04-05 22:46:32 286

原创 C语言 实现 给定两个整形变量的值,将两个值的内容进行交换

#include "stdio.h"void main(){ int a=1,b=0,i; i=a; a=b; b=i; printf("a=%d\n",a); printf("b=%d\n",b);    }

2016-04-05 22:46:29 573

空空如也

空空如也

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

TA关注的人

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