- 博客(48)
- 收藏
- 关注
原创 进程相关知识
进程的概念 一个具有独立功能的曾旭的一次运行活动,同时也是紫苑分配的最小单元 程序与进程的区别 程序是在磁盘中的课执行文件 进程是程序执行的实例 一个进程可以包含多个程序,一个程序可以对应多个进程 进程是暂时的,程序是长久的。 二者组成不同 进程 由 程序 数据 进程控制块组成 进程的生命周期 创建 运行 撤销 进程的三个状态
2016-12-11 21:36:17
303
原创 针对有头结点的链表进行排序
1.插入排序 需要用两个指针对链表进行遍历,一个指针用于标记待插入的节点(外循环),另一个指针用于寻找插入位置(内循环)。因为需要进行节点的删除与插入,因此对用于遍历的两个指针,还需要再添加两个前驱指针。 Node *InsertSortList( Node *L ) { Node *p1, *p2, *temp, *prep1, *prep2; if( L-
2016-12-09 23:26:23
826
原创 链表的基本排序
冒泡排序 比较相邻节点,选出未排序元素中的最大数,需要用一个尾指针由后向前遍历链表。这里不改变链表结构,而是交换节点存储的数据。 Node *BubbleSort( Node *L ) { Node *p, *tail, *next; int temp; if( L->next->next == NULL ) return L; for( p = L
2016-12-08 22:43:01
304
原创 针对文件描述符和合针对流的两种函数对文件的复制
1.针对文件描述符的函数文件复制: #include #include #include #include #include #include /*使用几个文件操作函数所需要的头文件*/ #define MAXSIZE 1024 int main(int argc,char *argv[]) { int from_fd; int to
2016-12-07 22:51:12
256
原创 文件
1.系统调用: 所谓系统调用是指操作系统提供给用户的一组“特殊”接口,用户程序可以通过这组“特殊”接口来获得操作系统内核提 供的的服务。 为了更好地保护内核空间,将程序的运行空间分为内核空间和用户空间(也就是常称的内核态和用户态),它们分别 运行在不同的级别上,在逻辑上是相互隔离的。 因此,用户进程在通常情况下不允许访问内核数据,也无法使用内核函数,它们只能在用户
2016-12-06 17:33:15
266
原创 有缓冲文件操作的几个函数
1.fopen: 函数的功能:打开文件(基于标准I/O文件) 函数的原型:FILE * fopen(const char *path,const char *mode) 函数的参数:path:打开的文件路径或文件名 mode:表示流行态 (1)r:打开只读文件,该文件必须存在 (2)r+:打开读写文件,该文件必须存在 (3)w:打开只写文件,
2016-12-05 17:37:08
312
原创 有关文件操作的几个函数
1.creat: (1)函数的作用:建立,创建新文件。 (2)函数的原型:int creat (const char * pathname,mode_t mode) (3)函数的参数:pathname:要建立的文件路径字符串。如:“/home/hello.c”。 mode:建立文件的权限。 (4)函
2016-12-03 22:58:13
239
原创 枚举与define的区别和volatile关键字的作用
1.枚举与define的区别: (1)从处理过程的角度看: #define宏是由编译预处理器在预编译处理时处理的,而且只做简单的字符串的替换。枚举常量则是在编译的时候确定其值的。 (2)从调试的角度看: 通常情况下,在编译器里,可以调试枚举常量,而不能调试宏常量。 (3)从数据的类型看: #define可以编译任意类型的常量,而枚举只能是定义整型常量。 (
2016-12-02 10:52:46
549
原创 typedef 与 define
1.typedef是一种在计算机编程语言中用来声明自定义数据类型,配合各种原有数据类型来达到简化编程的目的的类型 定义关键字。 2. #define是预处理指令。在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编 译已被展开的源程序时才会发现可能的错误并报错。 例如: typedef int INTEGER; 这以后就可用IN
2016-11-30 21:11:32
341
原创 顺序表与链式表
1.数据元素之间不是独立的,存在特定的关系,这些关系即结构。所以数据结构是指数据对象中数据元素之间的关系。 数据结构分为逻辑结构和物理结构。 逻辑结构分为: 集合结构:数据元素之间没有特别的关系,仅同属相同集合。 线性结构:数据元素之间是一对一的关系。 树形结构:数据元素之间存在一对多的层次关系。 图形结构:数据元素之间是多对多的关系。 物理结构分为:
2016-11-29 19:11:49
426
原创 队列的创建于基本操作
一 队列结构体的创建 typedef struct { int data[MAX_SIZE]; int front; int rear; }squeue; 二初始化队列 int initsqueue(squeue *q) { q->front=0; q->rear=0; return 1; } 三 返回队长度 int queuelength(
2016-11-28 22:45:17
295
原创 栈的创建于基本操作
一 定义结构体 typedef struct { int data[MAX_SIZE]; int top; }sqstack; 二 栈置空 int initstack(sqstack *s) { s->top=-1; return 1; } 三 入栈操作 int push(sqstack *s,int e) { if(s->top == MAX_
2016-11-27 21:24:48
267
原创 数组元素的插入和删除
一 数组元素的插入 第一判断数组元素数目是否超出限制 第二判断插入的位置是否合理 第三移动插入位置之后的元素 第四插入元素 第五数组长度改变 if(length >= 20) { return 0; } if(i > length+1 ||i { return 0; } if(i { for(k = length-1;k >= i-1;k--) {
2016-11-26 22:09:22
761
原创 链表的几个基本操作
一 链表的复制 void fuzhi_linklist(linklist h,int a[]) { linklist p; linklist q; int i; p=h; for(i = 0;i { q=(linklist)malloc(sizeof(lnode)); q->data=a[i]; q->next=NULL; p->next=q; p=q;
2016-11-25 21:56:47
307
原创 预处理
们知道在编译过程中的预处理阶段会进行头文件展开,宏替换以及条件编译。 1.头文件展开: 首先是头文件展开,头文件的前面都有#符号,其实是理指令。 理指令是以#号开头的代码行。#号必须是该行除了任何空白字符外的第一个字符。#后是指令关键字,在关键字和#号 之间允许存在任意个数的空白字符。整行语句构成了一条预处理指令,该指令将在编译器进行编译之前对源代码做某 些转换。下面
2016-11-24 22:14:21
351
原创 用程序判断电脑CPU的大小端
电脑的cpu有两种,大端和小端cpu。 大端cpu: 所谓的大端,是指数据的高字节,保存在内存的低地址中,而数据的低字节,保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放; 小端: 所谓的小端,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合
2016-11-23 22:53:19
462
原创 函数指针与函数的数组指针
1.函数指针: 函数指针就是指向函数的指针可以作为函数的形参,能够提高代码的扩展性。 在这里我们需要知道回调函数: 回调函数就是C语言里面对函数指针的高级应用。简而言之,回调函数是一个通过函数指针调用的函数。如果你把函 数指针(函数的入口地址)传递给另一个函数,当这个函数指针被用来调用它所指向的函数时,我们就说这个函数是 回调函数。 回调函数的应用是非常广泛的。
2016-11-22 21:57:40
246
原创 命名规范
为提高代码的可读性,好的命名是很重要的。 1.而比较著名的命名规则首推匈牙利命名法,这种命名方法是由Microsoft程序员查尔斯·西蒙尼(Charles Simonyi) 提出的。 其主要思想是“在变量和函数名中加入前缀以增进人们对程序的理解”。匈牙利命名法关键是:标识符的名字以一个或者多个小写字母开头作为前缀;前缀之后的是首字母大写的 一个单词或多个单词组合,该单词
2016-11-21 22:24:12
369
原创 关键字
register 寄存器变量 关键字regiter请求编译器尽可能的将变量存在CPU的寄存器中。有以下几点注意的地方。 register变量必须是能被CPU寄存器所接受的类型,这通常意味着register变量必须是一个单个的值,并且其长度应小于或等于整型的长度。但是,有些机器的寄存器也能存放浮点数。 register变量可能不存放在内存中,所以不能用取址符运算符“
2016-11-20 21:19:54
252
原创 数组与指针
1.数组与指针的区别: (1)空间分配 指针是动态分配空间,通过malloc在堆上分配所需要的空间,分配的空间不一定连续,在使用完之后需要调用free()来释放分配空间。而数组是静态分配空间,在全局变量区或者栈 上分配空间,分配的空间是连续的,局部变量在生命周期结束后自动释放,全局变量在程序结束完自动释放。 (2)访问效率 指针是通过地址间接访问,而数组是直接访问
2016-11-19 21:05:37
227
原创 数组指针的用法
int (*p)[4]; //数组指针 数组指针就相当于一次声明了一个指针。只不过这个指针指向很特别,是一个数组。 []优先级大于*,故数组指针声明时要加()。 数组指针自增(*p++)时,指针指向移动sizeof(类型)。 其实上句在其他类型指针也适用。 如int *p; //指针指向了int,就是整型指针,整型指针有啥特点?就
2016-11-18 20:46:56
405
原创 指针数组 举例
指针数组是一种特殊的数组,指针数组的数组元素都是指针变量。指针数组的定义格式为: 类型名称 *数组名称[数组长度]; 例如:float *pf[3]; 因为下标运算符[]的优先级高于指针运算符*,上述定义等价于:float * (pf[3]); 说明pf是一个含有3个元素的数组,数组元素为指向float型变量的指针变量。 指针数组定义后,可以使数组元素指向一个变量和其他数组的首地址。下面
2016-11-17 21:31:50
392
原创 malloc ralloc calloc
1.malloc() (1)函数原型 void *malloc(unsigned int num_bytes); (2)功能 请求系统动态分配num_bytes个字节的空间,如果分配成功则返回第一个字节的地址,并且可以进行强制类型转换,告诉系统分配空间中存储的是那种类型的数据。否则返回空指 针NULL。 (3)当内存不在使用时,要用使用free函数将内存
2016-11-16 21:38:32
484
原创 指针与数组
指针数组与数组指针 指针数组:指针的数组,表示一个数组,并且数组的每一个元素都是指针类型。 数组指针:数组的指针,表示一个指针,并且是指向数组的指针。 什么时候数组和指针可以相同呢? 所有作为函数参数的数组名总是可以通过编译器转换为指针。在其他所有情况下(最有趣的情况就是“在一个文件中定义为数组,在另一个文件中声明为指针”),数组的声明就是数组,指针的声明就是指
2016-11-15 16:20:35
332
原创 对指针的使用
1.使用时要有良好的习惯,当指针不确定指向时,将指针初始化为NULL。 char *ptr =NULL; NULL //#define NULL (void *) 0 NULL是内存零地址,而且不能对零地址对应的内存空间进行操作。 只定义却不初始化就会出现段错误,系统会随机分配空间,内存泄漏。 2.当要向指针指向指向的空间赋值时要检查其是否分配了空间,如果没有分
2016-11-14 21:33:48
339
原创 一些字符串处理函数的实现
1 strlen 测试字符串的长度 int my_strlen(char *src) { int count; count =0; while(*src!='\0') { count++; src++; } return count; } 2strcat 连接两个字符串 char * my_strcat(char *str,
2016-11-13 22:17:14
262
原创 关于素数的问题
第一 求素数 一个数字循环 一个求因子循环 #include int main() { int i; int j; int flag; for(i = 4;i { flag=1; for(j = 2;j { if(i%j==0) { flag=0; break;
2016-11-12 20:25:10
251
原创 c语言的+
第一 i++与++i的区别 对于变量i来说都会在原来基础上加1的,重点区别于式子本身的值; i++式子值为i原来的值,就是通俗说的“先赋值再加1”;得到一个i的值 而++i式子值为i变化后的值,也就是“先加1后赋值”;得到i 这个变量 i++和++i相同之处是i都自增一,不同是i++表达式的值就是i,因为i++是先赋值后加值而++i表达式的值是i+1,因为++i是先加后赋值
2016-11-11 17:20:12
849
原创 C语言的几种循环
1 for循环: 形式为 for(expr1;expr2;expr3) { //循环体。 } 执行流程为 a. 执行expr1。 b. 判断expr2,如为真,则执行c,否则退出循环。 c. 执行循环体。 d. 执行expr3。 e. 转到b执行。 2 while循环。 形式为 while(exp) { //循环体。 } 执行流程为
2016-11-10 13:01:55
1089
原创 位运算的作用
先说一下位运算的简单用法 1. 按位与 & 用途:清零,取一个数中的某些指定位,保留一个数中的某些指定位 2. 按位或 | 用途:将一个数的某些位指定为1 3. 按位异或 ^ 用途:交换两个数 a=a^b; b=a^b; a=a^b 4. 左移 > 左移代表数值*2 右移代表除以2 在进行位与、或
2016-11-09 15:19:56
1797
原创 变量的作用域和存储类别
变量作用域是指程序中声明的变量在程序的哪些部分是可用的。从变量作用域的角度,变量分为局部变量和全局变量两种 局部变量:在函数或复合语句内部定义的变量。该变量只在本函数或复合语句内部范围内有效。形参也是局部变量。 局部变量有助实现信息隐蔽,即使不同函数中使用了同名变量,也互不影响,因为它们占不同内存单元,就象不同班级有相同姓名的学生一样。这相当于局部变量增加了程序的灵活性和可移植性。
2016-11-08 15:44:03
1368
原创 二进制 八进制 十进制 十六进制
制也就是进制位,对于接触过电脑的人来说应该都不陌生,我们常用的进制包括:二进制、八进制、十进制与十六进制,它们之间区别在于数运算时是逢几进一位。比如二进制是逢2进一位,十进制也就是我们常用的0-9是逢10进一位。 第一 十进制转二进制 十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除2,依此步骤继续向下运算直到商为0为止。 第二 二进制转十进制 把二进制数按权展开
2016-11-07 17:03:55
378
原创 位运算
程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位进行操作。。 一 按位与运算符“&”是双目运算符。其功能是参与运算的两个数字对应的二进制位相与。只有对应的两个二进位均为1时,结果位才为1,否则为0。参与运算的数以补码方式出现。 按位与运算通常用来对某些位清0或保留某些位。 二 按位或运算符“|”是双目运算符。其功能是参与
2016-11-06 20:36:27
160
原创 数字字符与数字之间的相互转化
1 首先数字字符转化为数字并按原顺序输出 数字字符与数字之间转化 用到 str[i]-'0' 转化为一个整体数字需要用到循环 result*10+c 2数字转化为数字字符按原顺序输出 因为需要按照原顺序 所以需要多加一个循环 根据循环的位置有两种方法 第一种 先把数字逆序 用到一个求余循环 result%10 result*10+c 得到逆序数字 再进行循
2016-11-05 19:40:21
2492
原创 基本数据类型以及变量的命名
1)命名应当直观且可以拼读,可望文知意,便于记忆和阅读。 标识符最好采用英文单词或其组合,不允许使用拼音。程序中的英文单词一般不要太复杂,用词应当准确。 2)命名的长度应当符合“min-length && max-information”原则。 C 是一种简洁的语言, 命名也应该是简洁的。例如变量名MaxVal 就比MaxValueUntilOverflow 好用。标识符的长度一般
2016-11-04 11:02:37
369
原创 C语言指针的基本概念
指针是一种类型,被称为“指针类型”。指针类型描述的是一个地址,这个地址指向内存中另外一个对象的位置。简单地说,指针表示的是它所指向对象的地址。 1、比较point,*point,&point三者的区别 对于int * point; point:是指针变量,其内容是地址量。 *point:是指针变量的目标变量,即指针指向的那个变量,其内容是数据。 &point:是指指针变量
2016-11-03 19:53:25
900
原创 有关指针的数组类型
有关指针的数组类型的小总结 1 int i 定义整型变量 2 int *p p为指向整型数据的指针变量 3 int a[n] 定义有n个元素的整型数组 4 int *p[n] 定义一个指针数组p 它是由n个指向整型数据的指针元素构成 5 int (*p)[n] p 是指针变量 用于指向由n 个元素组成的一维数组 6 f() f 为返回值为整型值得函数 7 int *p()
2016-11-02 21:39:38
376
原创 关于结构体
关键字struct表示定义的是结构体的数据类型,紧随其后的标识符Student是结构体类型名。花括号中依次列举该类型的每个成员数据类型及其名称,每个成员的数据类型可以是基本数据类型或者自定义数据类型,但是不能重名。结构的成员也成为域。结构体类型的定义以一个分号结束。由于数据类型仅是为变量分配储存空间的储存模型,编译程序并不为任何数据类型分配存储空间,因此在定义结构体成员时,不能指定成员的存储种类。
2016-11-01 21:42:15
229
原创 C语言也被称为函数式语言
C语言程序通常为了避免他本身的弊端,以编写函数的方法来使他的复用性,维护性方便的却缺点放小。 所以说C程序的几乎全部工作都是由各式各样的函数完成的, 所以也把C语言称为函数式语言。 由于采用了函数模块式的结构,C语言易于实现结构化程序设计。使程序的层次结构清晰,便于程序的编写、阅读、调试。 1. 从函数定义的角度看,函数可分为库函数和用户定义函数两种。 (1)库函数 由C系统提供
2016-10-31 19:53:48
2569
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅