自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 寻找链表的中间节点

/* 思路: 快慢指针。 快指针每次走两步,慢指针每次走一步。快指针走到头时,慢指针所指的即为中间节点。 如果节点 的个数N为偶数,则中间的节点为第N/2个节点 */ #include #include #include using namespace std; struct node //建立一个全局变

2017-10-21 14:37:31 550

原创 寻找单链表的倒数第四个节点

/* 快慢指针。先让快指针先走4步,找到第四个结点。然后让快慢指针同时走,每次一步。当快指针走到最后一个结点时,两个指针再同时走一步,慢指针指向倒数第4个元素。 */ #include #include using namespace std; //使用命名空间 struct node //定义一个结构体 { char val; //

2017-10-20 19:59:49 602

原创 单链表的反转

#include #include using namespace std; //使用命名空间 struct node //定义一个结构体 { char val; //定义一个字符型变量 struct node * next; //定义一个结构体指针 }; typedef struct node NODE; //为结构体类型

2017-10-20 19:04:13 437

原创 内存管理的理解

内存管理 未初始化的全局变量(.bss段) bss 段:没有被初始化和初始化为0 的全局变量 bss类型的全局变量只占运行时的内存空间,而不占用文件空间 作为全局变量,在整个程序运行周期内,bss数据是一直存在的 初始化过的全局变量(.data段) data 段用来存放那些初始化为非0 的全局变量 data类型的全局变量既占文件空间,也占运行时的内存空间 作为全局变量,在整

2017-03-07 13:25:12 525

原创 引用

引用 引用:引用是已定义变量的别名(另一个名称) 主要用途:用作函数的形参; 定义引用的一般格式: 类型 &引用名 = 变量名; 如: int a = 1; int &b = a;b是a 的别名,因此a和b是同一单元,即a和b的值和地址都相同; "int &"指的是指向int的引用。 注: 定义引用时一定要初始化,指明该引用变量是谁的别名 const引用是指向 const对象的引

2017-03-06 00:48:00 719

原创 register变量

register关键字 若一个变量被register来修饰,则该变量是一个寄存器变量 作用: 请求编译器把这个修饰的变量尽可能放在cpu内部寄存器中,减少CPU到内存中抓取数据的次数,从而提高程序的执行效率。 注意:是尽可能,不是绝对可以,因为一个cpu寄存器也就几个到几十个(如:X86:十几个ARM:最多37个)资源有限,不可能每个都可以放在寄存器中。 一般频繁被访问的变量用regis

2017-02-26 00:11:48 5220

原创 malloc、realloc和calloc知识的整理

malloc函数 函数原型为 void* malloc(unsigned int size); 作用: 在内存的动态存储区中分配一个长度为size的连续空间。此函数的值(即“返回值”)是一个分配域的起始地址(类型为void)。如果此函数未能成功执行(例如内存空间不足),则返回空指针(NULL); 头文件:#include #incldue 注意:当内存不再使用时,应使用free()函数将

2017-02-25 20:25:04 506

原创 const关键字作用总结

const关键字 const是constant的简写,只要一个变量前面用const来修饰,就意味着该变量里的数据可以被访问,不能被修改。也就是说const意味着“只读”readonly 规则:const离谁近,谁就不能被修改; const修饰一个变量,一定要给这个变量初始化值,若不初始化,后面就无法初始化。 本质:const在谁后面谁就不可以修改,const在最前面则将其后移一位,二者等效

2017-02-23 18:33:39 19109

原创 在C语言中static关键字的作用

static关键字的作用 在C语言中 static修饰函数的时候 静态函数:作用范围仅限于它的源文件,即只有本文件内才可以调用,函数名在其他文件内不可 见。 static修饰局部变量的时候 局部静态变量:局限于特定函数,但出作用域并不释放,在函数体内静态变量的值也能维持。 static修饰全局变量的时候 全局静态变量:作用范围局限于它的源文件,即只有本文

2017-02-22 17:39:21 5316

原创 多维数组和指针

多维数组和指针 int  a[3][4] ={{},{},{}}; 二维数组a是由3个一维数组组成的; 从二维数组角度看,a代表二维数组首元素的地址,此元素不是一个简单的整型元素,而是4个整型元素所组成的一维数组; a代表首行的首地址       a+1代表第一行的首地址 a[0]、a[1]、a[2]为一位数组名 a[0]代表一维数组a[0]中第0列元素的地址,即&a[0][0];a[

2017-02-21 22:53:24 413

原创 数组与指针

数组与指针 数组名(不包括形参数组名,形参数组并不占用实际内存单元)代表数组首元素(即序列号为0的元素)的地址。 int  a[10]; int *p; p=&a[0]=a;  把数组名a的首元素的地址赋给指针变量p; *p=1; 表示将1赋给p当前所指向的数组元素; p+1   ->指向同一个数组的下一个元素,此处不是简单的加1,而是根据p指针所属的数据类型,加上一个单位的步长,例如

2017-02-21 17:55:45 389

原创 C语言与C++的基本区别

C语言的优点: 1、  出色的移植行 2、访问硬件 3、运行效率高 注:所有的操作系统的内核都是用C语言实现的 C语言的缺点: 1、  扩展性差2、复用性差3、维护性差 面向对象:C++的优点: 1、  扩展性好2、复用性好3、维护性好 C语言+面向对象方法论:1、objective c2、c++ C++支持的编程规范:过程式、数据抽象、基于对象、面向对象式、函数式、泛型形式、模板

2017-02-12 20:07:05 5088

原创 四层网络模型和七层网络模型

OSI 物理层:计算机只有0和1,存储在计算机中的也是0和1 的组合,不过0和1不能在真实的物理介质中传输,需要转换为光信号和电信号,所以物理层负责将这些比特例会(0101)与光电信号进行转化。 如果没有物理层,那么也就不存在互联网,不存在数据的共享,因为数据无法在网络中流动。 数据链路层:数据在这一层不是以比特流的形式传输,而是分割成一个一个的帧再进行传输。 网络层:如果只有数据链路层没

2017-01-22 19:16:42 709

原创 5类IP地址的分类

A类IP:0.0.0.0----127.255.255.255 0—127,其中0代表任何地址,127代表回环测试地址,因此,A类地址的实际范围是1—126,默认子网掩码是255.0.0.0 B类IP:128.0.0.0----191.255.255.255 128—191,其中128.0.0.0和191.255.0.0为保留IP,实际范围是128.1.0.0—191.254.0.0,子网掩

2017-01-22 19:14:25 5072

原创 无缓冲访问文件

Creat函数 表头文件:#include           #include           #include 定义函数: int creat(const char *pathname,mode_tmode); 函数说明: 参数pathname指向欲建立的文件路径字符串,creat()相当于使用下列的调用方式调用open();   open(const char *pathn

2017-01-17 22:20:30 502

原创 struct、字节序和枚举

struct结构体 内存对齐:提高程序的性能,会产生内存空洞          Gcc编译器有1,2,4这三种方式的字节          #pragma pack(1)          #pragma pack()    以一个字节对齐   字节序:CPU的属性         小端字节序:低字节放在低地址         大端字节序:高字节放在低地址         Int

2016-12-19 11:54:03 735

原创 const、typedef和volatile

Const:         Const 修饰num         Const  int  num  =  5;         实际上修饰num这个变量名,不能通过num去修改变量的值         规则:const离谁近,谁就不能修改               const修饰一个变量,一定要给这个变量初始化值,若不初始化,后面就无法初始化   typedef关键字  :  

2016-12-19 11:52:35 849

原创 static和extern

static:      作用:static修饰一个局部变量,它保存在数据区的静态数据区,使这个静态局部变量生命周期延长至整个程序结束。           既能修饰变量,又能修饰函数,既能修饰局部变量,也能修饰全局变量。           static修饰全局变量只能在本文件访问,不能在其他文件访问。           static修饰函数只能在本文件访问,不能在其他文件访问。  

2016-12-19 11:51:11 321

原创 register关键字

register    寄存器变量           CPU组成:运算器   控制器    存储器(寄存器) register的作用:请求编译器把这个修饰变量尽可能放在CPU内部寄存器中,减少了CPU到内存中抓取数据的次数。从而提高程序的执行效率 频繁被访问的变量用register修饰 注意:register只能修饰局部变量,不能修饰全部局变量和函数       register变量可

2016-12-19 11:50:07 559

原创 宏定义

宏定义: 定义常量与命令(避免幻数) #define MAX 100 #define SIZE 1024 一般来说,简单频繁被调用的函数使用函数式宏定义代替实现   #if 0       #endif      用于大段注释 定义头文件 #ifndef   ADD_H #define   ADD_H      …. #endif                 防止头文件重

2016-12-19 11:49:24 262

原创 位运算的使用技巧

位运算:      位与(&) 位或(|) 位非(~) 位异或(^) 左移() 右移(>>)      注:位运算处理无符号数              右移拿符号位补位              左移拿0来补位    与“&”清零保存特定位    或“|” 置 1    异或“^” 使特定位取反   思考: 怎样不引入第三方变量,交换两个变量的值 Int a = 5;

2016-12-17 10:49:25 330

原创 算术运算符的使用注意

运算符与表达式 算术运算符   i++   先使用完毕后再自加              ++i   先自加    再使用 例如:i = i * ((i++)+(++i))       求出 i = 19;       i = (i + +)+(+ + i)+(i + +)+(+ + i)       求出 i = 15;       i = (+ + i)+(i + +)+(+

2016-12-17 10:37:09 680

原创 内存分配

ralloc: 追加分配     先释放原空间,再进行分配 calloc:一块一块进行分配     块与块的空间可能不连续 内存管理:  先访问虚拟地址空间,每个进程都有分配一个4G的虚拟地址空间 函数内部定义的是局部数组 内存分配的方式:从数据区分配                 在栈上分配                 在堆空间上分配 Int  add(int a,int b

2016-12-11 10:34:12 263

原创 指针和数组的区别

指针和数组的区别: 空间分配: 指针是动态分配空间,通过malloc在堆上分配所需要的空间,分配的空间不一定连续,在使用完之后需要调用free()来释放分配空间。 数组是静态分配空间,在全局变量区或者栈上分配空间,分配的空间是连续的,局部变量在生命周期结束后自动释放,全局变量在程序结束完自动释放。 访问效率: 指针通过地址间接访问,而数组是直接访问数值,因此指针的访问效率低,数组的访问效

2016-12-09 10:36:39 218

原创 数组指针和回调函数

一维数组作形参时,编译器把它看成一个数组指针 传一维数组名用元素的指针来接 传二维数组名用一维数组指针来接 数组指针在传参时使用 函数名也是一个指针常量,保存函数的入口地址 函数名可以作实参传递 如果函数指针作形参,指向的那个函数称为回调函数 回调函数的作用: 提高代码扩展性和维护性 好的扩展性:增加新功能时,修改的代码越少越好。

2016-12-09 10:35:44 308

原创 数组(2)

a[i][j]; *(a+i)[j] (*(*(a+i)+j))   *(*(a+i)+j); a+i:第i+1个一维数组的地址 *(a+i):第i+1个一维数组首元素的地址 *(a+i)+j:第i+1个一维数组的第j+1个元素的地址 *(*(a+i)+j): 第i+1个一维数组的第j+1个元素的值 *(*(*(a+i)+j)+k): a+i:第i+1个二维数组的地址; *(

2016-12-06 22:20:57 265

原创 数组(1)

数组 一维数组:    int a[3];     3个整型    12个字节      C99编译器允许用动态数组      C89编译器不允许用动态数组,只能用静态数组。 #define MAX_SIZE 1024    提高代码移植性和维护性   int a[3]; memset (a,0,sizeof(a));     把a[3]初始化为0. 数组名是指针常量,这个指针常量

2016-12-06 21:53:17 257

转载 IT技术学习指导之Linux系统入门的4个阶段

全世界60%的人都在使用Linux。几乎没有人没有受到Linux系统的“恩惠”,我们享受的大量服务(包括网页服务、聊天服务等)背后几乎都是由Linux系统支撑的服务器,超过20亿人每天都随身携带基于Linux内核开发的 Android手机出门,Linux也广泛应用在嵌入式系统上。因此学习Linux系统变得尤为重要,对于普通用户而言,平面式的学习Linux系统的基本使用已经足够,但对于开发者或者运维

2016-12-02 22:45:10 375

转载 C语言中的高级声明--《c和指针》摘要

分析C语言中的高级声明时,记住三点: 1、用于声明变量的表达式和普通的表达式在求值时所使用的规则相同 2、下标运算符[ ] 和( )的优先级大于* 3、从里往外分解,可以使用替代符号帮助分解 例子: 1、 int (*f) [];  int *f[]; 前者是指针,指向数组,数组的元素是int 后者是数组,数组的元素是int *指针 2、

2016-12-02 22:40:53 326

转载 最新编程语言排行榜出炉,看看你学的语言能排第几?

第一个现代意义上的高级语言FORTRAN于1954年提出,其编译器完成于1957年,距1946年第一台电子计算机ENIAC诞生已经11年。从提出到实现花了3年时间,可见第一个开发编译器的不易。在FORTRAN编译器实现之前,许多科学家甚至认为高级语言编译器是不可能实现的。自从高级语言诞生以来,高级语言不断涌现,不断超越,有的是后起之秀前途光明,有的逐步被淘汰,还有的经过多年的发展,不仅没被淘汰反而

2016-12-02 22:32:05 3963

转载 malloc实现原理

malloc()是C语言中动态存储管理 的一组标准库函数之一。其作用是在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值 是一个指向所分配的连续存储域的起始地址的指针。    动态内存分配 就 是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。动态内存分配不像数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据 程序的需要即时分配,且

2016-12-02 22:18:41 318

原创 理解指针2

远指针,巨指针   实际上就是多维指针           0x3000   0x3000     Char *ptr=”hello world”;                                    0x3001 Sizeof(ptr);strlen(ptr);             

2016-12-01 08:47:03 241

原创 理解指针

首先指针是一个变量 Int num = 5; 指针变量保存地址 int*p; int*    p; Num++;   对num对应的内存空间的值自加1; P++;      对p对应内存空间的值自家1; (*p)++; 对p指向的内存空间的值自加1; *:间接运算符、取值运算符: 取指针变量对应空间保存的地址对应的内存空间的值 5  

2016-12-01 08:46:00 275

原创 理解变量

Int num = 5 变量的三大特点: 变量的数据类型:主要说明变量占用内存空间的大小。如int型。 变量的作用域:变量的有效性的范围。即:变量的使用范围。 变量的储存类型:变量在内存中的储存方式,不同的储存方式,影响变量在内存中的生存周期。 计算机的三大组成部分:CPU     内存      硬盘                             动态数据   静态数据

2016-11-28 23:30:18 456

原创 数据类型的笔记整理

数据类型 字节长度     bit              字节     1Byte=8bit              字        (32位系统)    字=4个字节=32bit              半字        半字=2Byte=16位 sizeof 运算符 作用:测量一个变量、数据类型所占的字节长度。                    测量变量:sizeo

2016-11-25 23:29:10 302

原创 复杂的声明

int a;   整型变量 Int *a;   整型指针变量 Int **a;  整型指针的指针变量 Int a[10];  整型数组 Int *a[10];  整型指针数组 Int (*a)[10];  数组指针变量 Int (*a)[int];  函数指针变量  Int (*a[10])(int); 函数指针数组 Int *(*(*fp1)(int))[10]; Fp1:函数

2016-11-22 22:37:24 278

转载 使用Linux的用户,你们真的了解开源硬件吗?

商业软件和免费软件已经互相纠缠很多年了,但是这俩经常误解对方。这并不奇怪 -- 对一方来说是生意,而另一方只是一种生活方式。但是,这种误解会给人带来痛苦,这也是为什么值得花精力去揭露这里面的内幕。   一个逐渐普遍的现象:对开源硬件的不断尝试,不管是Canonical,Jolla,MakePlayLive,或者其他公司。无论是评论员或是终端用户,通常免费软件用户都会为新的硬件平台发布表现出过

2016-11-20 19:05:23 403

转载 一个老工程师给年轻人的“十大忠告”

1、好好规划自己的路,不要跟着感觉走; 根据个人的理想来安排自己的生活,绝大部分人并不指望成为什么院士或教授,而是希望活得滋润一些,痛快一些,那么就需要慎重安排自己的的轨迹,从一个行业入手逐渐对该行业深入了解,不要频繁跳槽,特别是不要为了一点工资而转移阵地,从长远看,这点钱根本不算什么,当你对一个行业有那么几年的体会以后,钱根本不是问题,频繁地动荡不是上策,最后你对哪个行业都没有摸透,永远是

2016-11-20 18:51:16 392

转载 转载的十大编程语言

1. PHP   基本描述:一种开源,工作在服务器端,跨平台,使用HTML脚本的语言,因为可置入HTML页面,因此尤其适用于网页制作。   学习理由:使用十分广泛。“借助缓存高速调用脚本,并使用编译代码插件来增强效果是今后趋势所在。使用C或COBOL创建Web应用程序是不可行的。   2. C#   基本描述:一种通用编辑,面向对象的编程语言,由微软作为其.net计划的一部

2016-11-20 18:47:14 359

原创 C语言的一些小知识点

C语言特点:出色的移植性                       访问硬件                        运行效率高 移植性:从一个平台切换到另一个平台,修改的代码越少,移植性越好。 C语言可以在单片机,DSP,ARM上开发,C语言有出色的移植性。 汇编是可以访问硬件,汇编是低级语言实现不了复杂的语言。 对硬件做初始化,用汇编来编写。 对硬件做复杂操作时,用C语

2016-11-19 23:17:55 243

空空如也

空空如也

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

TA关注的人

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