- 博客(53)
- 收藏
- 关注
原创 寻找链表的中间节点
/*思路:快慢指针。快指针每次走两步,慢指针每次走一步。快指针走到头时,慢指针所指的即为中间节点。如果节点 的个数N为偶数,则中间的节点为第N/2个节点 */ #include #include #include using namespace std;struct node //建立一个全局变
2017-10-21 14:37:31
483
原创 寻找单链表的倒数第四个节点
/*快慢指针。先让快指针先走4步,找到第四个结点。然后让快慢指针同时走,每次一步。当快指针走到最后一个结点时,两个指针再同时走一步,慢指针指向倒数第4个元素。*/ #include #include using namespace std; //使用命名空间 struct node //定义一个结构体 { char val; //
2017-10-20 19:59:49
531
原创 单链表的反转
#include #include using namespace std; //使用命名空间 struct node //定义一个结构体 { char val; //定义一个字符型变量 struct node * next; //定义一个结构体指针 };typedef struct node NODE; //为结构体类型
2017-10-20 19:04:13
377
原创 内存管理的理解
内存管理未初始化的全局变量(.bss段)bss 段:没有被初始化和初始化为0 的全局变量bss类型的全局变量只占运行时的内存空间,而不占用文件空间作为全局变量,在整个程序运行周期内,bss数据是一直存在的初始化过的全局变量(.data段)data 段用来存放那些初始化为非0 的全局变量data类型的全局变量既占文件空间,也占运行时的内存空间作为全局变量,在整
2017-03-07 13:25:12
463
原创 引用
引用引用:引用是已定义变量的别名(另一个名称)主要用途:用作函数的形参;定义引用的一般格式:类型 &引用名 = 变量名;如: int a = 1;int &b = a;b是a 的别名,因此a和b是同一单元,即a和b的值和地址都相同;"int &"指的是指向int的引用。注: 定义引用时一定要初始化,指明该引用变量是谁的别名const引用是指向 const对象的引
2017-03-06 00:48:00
659
原创 register变量
register关键字若一个变量被register来修饰,则该变量是一个寄存器变量作用:请求编译器把这个修饰的变量尽可能放在cpu内部寄存器中,减少CPU到内存中抓取数据的次数,从而提高程序的执行效率。注意:是尽可能,不是绝对可以,因为一个cpu寄存器也就几个到几十个(如:X86:十几个ARM:最多37个)资源有限,不可能每个都可以放在寄存器中。一般频繁被访问的变量用regis
2017-02-26 00:11:48
5101
原创 malloc、realloc和calloc知识的整理
malloc函数函数原型为 void* malloc(unsigned int size);作用: 在内存的动态存储区中分配一个长度为size的连续空间。此函数的值(即“返回值”)是一个分配域的起始地址(类型为void)。如果此函数未能成功执行(例如内存空间不足),则返回空指针(NULL);头文件:#include#incldue注意:当内存不再使用时,应使用free()函数将
2017-02-25 20:25:04
427
原创 const关键字作用总结
const关键字const是constant的简写,只要一个变量前面用const来修饰,就意味着该变量里的数据可以被访问,不能被修改。也就是说const意味着“只读”readonly规则:const离谁近,谁就不能被修改;const修饰一个变量,一定要给这个变量初始化值,若不初始化,后面就无法初始化。本质:const在谁后面谁就不可以修改,const在最前面则将其后移一位,二者等效
2017-02-23 18:33:39
18857
原创 在C语言中static关键字的作用
static关键字的作用在C语言中static修饰函数的时候静态函数:作用范围仅限于它的源文件,即只有本文件内才可以调用,函数名在其他文件内不可见。static修饰局部变量的时候局部静态变量:局限于特定函数,但出作用域并不释放,在函数体内静态变量的值也能维持。static修饰全局变量的时候全局静态变量:作用范围局限于它的源文件,即只有本文
2017-02-22 17:39:21
5147
原创 多维数组和指针
多维数组和指针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
308
原创 数组与指针
数组与指针数组名(不包括形参数组名,形参数组并不占用实际内存单元)代表数组首元素(即序列号为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
345
原创 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
5002
原创 四层网络模型和七层网络模型
OSI物理层:计算机只有0和1,存储在计算机中的也是0和1 的组合,不过0和1不能在真实的物理介质中传输,需要转换为光信号和电信号,所以物理层负责将这些比特例会(0101)与光电信号进行转化。如果没有物理层,那么也就不存在互联网,不存在数据的共享,因为数据无法在网络中流动。数据链路层:数据在这一层不是以比特流的形式传输,而是分割成一个一个的帧再进行传输。网络层:如果只有数据链路层没
2017-01-22 19:16:42
626
原创 5类IP地址的分类
A类IP:0.0.0.0----127.255.255.2550—127,其中0代表任何地址,127代表回环测试地址,因此,A类地址的实际范围是1—126,默认子网掩码是255.0.0.0B类IP:128.0.0.0----191.255.255.255128—191,其中128.0.0.0和191.255.0.0为保留IP,实际范围是128.1.0.0—191.254.0.0,子网掩
2017-01-22 19:14:25
4777
原创 无缓冲访问文件
Creat函数表头文件:#include #include #include定义函数: int creat(const char *pathname,mode_tmode);函数说明: 参数pathname指向欲建立的文件路径字符串,creat()相当于使用下列的调用方式调用open(); open(const char *pathn
2017-01-17 22:20:30
447
原创 struct、字节序和枚举
struct结构体内存对齐:提高程序的性能,会产生内存空洞 Gcc编译器有1,2,4这三种方式的字节 #pragma pack(1) #pragma pack() 以一个字节对齐 字节序:CPU的属性 小端字节序:低字节放在低地址 大端字节序:高字节放在低地址 Int
2016-12-19 11:54:03
678
原创 const、typedef和volatile
Const: Const 修饰num Const int num = 5; 实际上修饰num这个变量名,不能通过num去修改变量的值 规则:const离谁近,谁就不能修改 const修饰一个变量,一定要给这个变量初始化值,若不初始化,后面就无法初始化 typedef关键字 :
2016-12-19 11:52:35
782
原创 static和extern
static: 作用:static修饰一个局部变量,它保存在数据区的静态数据区,使这个静态局部变量生命周期延长至整个程序结束。 既能修饰变量,又能修饰函数,既能修饰局部变量,也能修饰全局变量。 static修饰全局变量只能在本文件访问,不能在其他文件访问。 static修饰函数只能在本文件访问,不能在其他文件访问。
2016-12-19 11:51:11
283
原创 register关键字
register 寄存器变量 CPU组成:运算器 控制器 存储器(寄存器)register的作用:请求编译器把这个修饰变量尽可能放在CPU内部寄存器中,减少了CPU到内存中抓取数据的次数。从而提高程序的执行效率频繁被访问的变量用register修饰注意:register只能修饰局部变量,不能修饰全部局变量和函数 register变量可
2016-12-19 11:50:07
510
原创 宏定义
宏定义:定义常量与命令(避免幻数)#define MAX 100#define SIZE 1024一般来说,简单频繁被调用的函数使用函数式宏定义代替实现 #if 0 #endif 用于大段注释定义头文件#ifndef ADD_H#define ADD_H ….#endif 防止头文件重
2016-12-19 11:49:24
232
原创 位运算的使用技巧
位运算: 位与(&) 位或(|) 位非(~) 位异或(^) 左移() 右移(>>) 注:位运算处理无符号数 右移拿符号位补位 左移拿0来补位 与“&”清零保存特定位 或“|” 置1 异或“^” 使特定位取反 思考: 怎样不引入第三方变量,交换两个变量的值Int a = 5;
2016-12-17 10:49:25
300
原创 算术运算符的使用注意
运算符与表达式算术运算符 i++ 先使用完毕后再自加 ++i 先自加 再使用例如:i = i * ((i++)+(++i)) 求出 i = 19; i = (i + +)+(+ + i)+(i + +)+(+ + i) 求出 i = 15; i = (+ + i)+(i + +)+(+
2016-12-17 10:37:09
629
原创 内存分配
ralloc: 追加分配 先释放原空间,再进行分配calloc:一块一块进行分配 块与块的空间可能不连续内存管理: 先访问虚拟地址空间,每个进程都有分配一个4G的虚拟地址空间函数内部定义的是局部数组内存分配的方式:从数据区分配 在栈上分配 在堆空间上分配Int add(int a,int b
2016-12-11 10:34:12
231
原创 指针和数组的区别
指针和数组的区别:空间分配:指针是动态分配空间,通过malloc在堆上分配所需要的空间,分配的空间不一定连续,在使用完之后需要调用free()来释放分配空间。数组是静态分配空间,在全局变量区或者栈上分配空间,分配的空间是连续的,局部变量在生命周期结束后自动释放,全局变量在程序结束完自动释放。访问效率:指针通过地址间接访问,而数组是直接访问数值,因此指针的访问效率低,数组的访问效
2016-12-09 10:36:39
193
原创 数组指针和回调函数
一维数组作形参时,编译器把它看成一个数组指针传一维数组名用元素的指针来接传二维数组名用一维数组指针来接数组指针在传参时使用函数名也是一个指针常量,保存函数的入口地址函数名可以作实参传递如果函数指针作形参,指向的那个函数称为回调函数回调函数的作用:提高代码扩展性和维护性好的扩展性:增加新功能时,修改的代码越少越好。
2016-12-09 10:35:44
255
原创 数组(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
237
原创 数组(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
234
转载 IT技术学习指导之Linux系统入门的4个阶段
全世界60%的人都在使用Linux。几乎没有人没有受到Linux系统的“恩惠”,我们享受的大量服务(包括网页服务、聊天服务等)背后几乎都是由Linux系统支撑的服务器,超过20亿人每天都随身携带基于Linux内核开发的 Android手机出门,Linux也广泛应用在嵌入式系统上。因此学习Linux系统变得尤为重要,对于普通用户而言,平面式的学习Linux系统的基本使用已经足够,但对于开发者或者运维
2016-12-02 22:45:10
321
转载 C语言中的高级声明--《c和指针》摘要
分析C语言中的高级声明时,记住三点:1、用于声明变量的表达式和普通的表达式在求值时所使用的规则相同2、下标运算符[ ] 和( )的优先级大于*3、从里往外分解,可以使用替代符号帮助分解例子:1、 int (*f) []; int *f[];前者是指针,指向数组,数组的元素是int后者是数组,数组的元素是int *指针2、
2016-12-02 22:40:53
275
转载 最新编程语言排行榜出炉,看看你学的语言能排第几?
第一个现代意义上的高级语言FORTRAN于1954年提出,其编译器完成于1957年,距1946年第一台电子计算机ENIAC诞生已经11年。从提出到实现花了3年时间,可见第一个开发编译器的不易。在FORTRAN编译器实现之前,许多科学家甚至认为高级语言编译器是不可能实现的。自从高级语言诞生以来,高级语言不断涌现,不断超越,有的是后起之秀前途光明,有的逐步被淘汰,还有的经过多年的发展,不仅没被淘汰反而
2016-12-02 22:32:05
3852
转载 malloc实现原理
malloc()是C语言中动态存储管理 的一组标准库函数之一。其作用是在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值 是一个指向所分配的连续存储域的起始地址的指针。 动态内存分配 就 是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。动态内存分配不像数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据 程序的需要即时分配,且
2016-12-02 22:18:41
274
原创 理解指针2
远指针,巨指针 实际上就是多维指针 0x3000 0x3000 Char *ptr=”hello world”; 0x3001Sizeof(ptr);strlen(ptr);
2016-12-01 08:47:03
208
原创 理解指针
首先指针是一个变量Int num = 5;指针变量保存地址int*p;int* p;Num++; 对num对应的内存空间的值自加1;P++; 对p对应内存空间的值自家1;(*p)++; 对p指向的内存空间的值自加1;*:间接运算符、取值运算符:取指针变量对应空间保存的地址对应的内存空间的值5
2016-12-01 08:46:00
237
原创 理解变量
Int num = 5变量的三大特点:变量的数据类型:主要说明变量占用内存空间的大小。如int型。变量的作用域:变量的有效性的范围。即:变量的使用范围。变量的储存类型:变量在内存中的储存方式,不同的储存方式,影响变量在内存中的生存周期。计算机的三大组成部分:CPU 内存 硬盘 动态数据 静态数据
2016-11-28 23:30:18
395
原创 数据类型的笔记整理
数据类型字节长度 bit 字节 1Byte=8bit 字 (32位系统) 字=4个字节=32bit 半字 半字=2Byte=16位sizeof 运算符 作用:测量一个变量、数据类型所占的字节长度。 测量变量:sizeo
2016-11-25 23:29:10
209
原创 复杂的声明
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
232
转载 使用Linux的用户,你们真的了解开源硬件吗?
商业软件和免费软件已经互相纠缠很多年了,但是这俩经常误解对方。这并不奇怪 -- 对一方来说是生意,而另一方只是一种生活方式。但是,这种误解会给人带来痛苦,这也是为什么值得花精力去揭露这里面的内幕。 一个逐渐普遍的现象:对开源硬件的不断尝试,不管是Canonical,Jolla,MakePlayLive,或者其他公司。无论是评论员或是终端用户,通常免费软件用户都会为新的硬件平台发布表现出过
2016-11-20 19:05:23
356
转载 一个老工程师给年轻人的“十大忠告”
1、好好规划自己的路,不要跟着感觉走;根据个人的理想来安排自己的生活,绝大部分人并不指望成为什么院士或教授,而是希望活得滋润一些,痛快一些,那么就需要慎重安排自己的的轨迹,从一个行业入手逐渐对该行业深入了解,不要频繁跳槽,特别是不要为了一点工资而转移阵地,从长远看,这点钱根本不算什么,当你对一个行业有那么几年的体会以后,钱根本不是问题,频繁地动荡不是上策,最后你对哪个行业都没有摸透,永远是
2016-11-20 18:51:16
360
转载 转载的十大编程语言
1. PHP 基本描述:一种开源,工作在服务器端,跨平台,使用HTML脚本的语言,因为可置入HTML页面,因此尤其适用于网页制作。 学习理由:使用十分广泛。“借助缓存高速调用脚本,并使用编译代码插件来增强效果是今后趋势所在。使用C或COBOL创建Web应用程序是不可行的。 2. C# 基本描述:一种通用编辑,面向对象的编程语言,由微软作为其.net计划的一部
2016-11-20 18:47:14
307
原创 C语言的一些小知识点
C语言特点:出色的移植性 访问硬件 运行效率高移植性:从一个平台切换到另一个平台,修改的代码越少,移植性越好。C语言可以在单片机,DSP,ARM上开发,C语言有出色的移植性。汇编是可以访问硬件,汇编是低级语言实现不了复杂的语言。对硬件做初始化,用汇编来编写。对硬件做复杂操作时,用C语
2016-11-19 23:17:55
205
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人