自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 资源 (2)
  • 收藏
  • 关注

原创 vfork()函数和fork()函数实现子进程的异同

除了fork()函数,还可以用vfork()函数来创建子进程。      (1)使用fork()创建一个子进程时,子进程只是完全复制父进程的资源。子进程独立于父进程,具有良好的并发性。而vfork()创建的子进程,操作系统并不将父进程的地址空间完全复制到子进程,用vfork()创建的子进程共享父进程的地址空间,也就是说,子进程完全运行在父进程的地址空间上。子进程对该地址空间中任何数据的修改同样

2017-11-30 18:11:25 296

原创 C语言里的多进程(用fork函数实现)

创建进程有两种方式,一是由操作系统创建;二是由父进程创建。操作系统创建的进程,它们之间是平等的,一般不存在资源继承关系。而由父进程创建的进程(子进程),它们和父进程存在隶属关系。子进程又可以创建进程,形成一个进程家族。      系统调用fork是创建一个新进程的唯一方法。进程调用fork函数就创建了一个子进程。      创建了一个子进程之后,父进程和子进程争夺CPU,抢到CPU者执

2017-11-30 10:08:54 13284 1

原创 C语言的动态分配函数

动态分配函数的核心是malloc()和free()。每次调用malloc()时,均分配剩余的内存的一部分;每次调用free()时,均向系统返还内存。被分配的空内存区中的内存叫做堆(heap)。动态分配函数的原型在中。      标准C定义了4种动态分配函数,可以用于所有的编译程序。它们是:calloc(),malloc(),free()和realloc()。

2017-11-29 22:42:17 1760

原创 fseek()和随机存取I/O

借助fseek()设置文件的位置指示,并使用C的I/O系统可以实施随机读写操作。原型如下:int fseek(FILE *fp,long int numbytes,int origin);      fp是fopen()返回的指针。      长整数numbytes是从原点origin到新位置的字节数。      origin的取值有下列3个宏:            SE

2017-11-29 10:50:58 349

原创 用fread()和fwrite()读写文件

ANSI C文件系统提供fread()和fwrite()两个函数,用于读/写长于一字节的数据类型。这两个函数允许读/写各种类型的数据块。它们的原型是:size_t fread(void *buffer,size_t num_bytes,size_t count,FILE *fp);size_t fwrite(const void *buffer,size_t num_bytes,size_t

2017-11-29 10:07:15 9640

原创 一个综合示例:通讯录管理系统

本示例充分利用前期所学一些C语言编程知识,主要涉及到的有:结构体,文件的读写等。本通讯录设定可以保存100条通讯录,每条通讯录包括:姓名,街道,城市,国家,邮编。程序运行后,显示一个主菜单:      1、添加联系人      2、删除联系人      3、显示所有联系人      4、保存联系人条目到文件      5、从文件读取联系人条目      6、

2017-11-28 21:38:18 4596

原创 用fputs()写入,用fgets()读出一个字符串

与putc(),getc()类似,将c替换成s的含义是不单单处理一个字符,而是处理一个字符串。这2个函数的原型是:int fputs(const char *str,FILE *fp);char *fgets(char *str, int length, FILE *fp);      函数fputs()向指定的流写串(由str指定)。出错时,fputs()返回EOF。      下

2017-11-27 07:00:45 1166

原创 用C语言实现一个自己的文件拷贝工具

#include #include int main(int argc, char *argv[]){ FILE *in, *out; char ch; if(argc!=3) { printf("You forgot to enter a filename.\n"); exit(1); } //打开源文件 if((in=fopen(argv[1

2017-11-27 06:37:40 597

原创 C语言的文件系统

C文件系统由若干互相联系的函数构成,这类函数要求包含头文件。常用的缓冲文件系统函数有:      fopen():打开一个文件      fclose():关闭一个文件      putc(),fputc():向文件写一个字符      getc(),fgetc():从文件中读取一个字符      fgets():从文件中读一字串      fputs():

2017-11-27 05:17:11 8511

原创 C语言的枚举类型(enumeration)

枚举(enumeration)是一系列命名的整形常量。枚举的例子有,一个星期里每一天的名称,钱币的币值等。如美国硬币币值的枚举定义:enum coin{penny,nickel,dime,quarter,half-dollar,dollar};      以下代码声明money为枚举类型coin的变量:enum coin money;//使用枚举类型变量money=dime;i

2017-11-25 21:00:55 2996

原创 C语言指针使用中的常见错误

指针的作用特别强,对许多问题是必须的。同时,偶尔错用指针,会带来意想不到的错误,甚至是灾难性的后果。      指针错误难以定位,因为指针本身并没有问题。问题在于,通过错误指针操作时,程序对未知内存区进行读写操作。读操作时,最坏的情况是取得无用数据;而写操作时,可能冲掉其他代码或数据。      (一)使用未初始化的指针(uninitialized pointer)int main(v

2017-11-25 12:06:30 9934 1

原创 指针与内存的动态分配(dynamic allocation)

动态分配(dynamic allocation)是程序在运行中取得内存的方法。指针为C的动态分配系统提供必要的支持。全局变量是编译时分配的,而非静态的局部变量使用栈空间,两者都不能在运行中增减。然而,程序在运行中也可能需要数量可变的内存空间。例如,程序可能需要使用动态数据结构,如链表或二叉树。所以程序必须要根据需要分配和释放内存。      C动态分配函数从堆(heap) ------ 系统的

2017-11-25 11:28:07 2662

转载 CentOS 6.4下安装中文输入法

转载自:http://www.linuxidc.com/Linux/2015-04/116771.htm记录CentOS 6.4下安装中文输入法的过程,希望对大家有所帮助。1.用root登录 ,或su root2.yum install "@Chinese Support"3.exit4.回到桌面,system->preferences->input met

2017-11-25 09:32:52 1120

原创 二维数组应用举例:游戏“一担挑”(tic-tac-toe)

本例游戏示范二维数组的用法。二维数组常常用以模拟棋盘博弈。    游戏规则:        (1)轮到计算机下子时,使用get_computer_move()函数扫描棋盘矩阵,寻找未占空格;发现空格后,将其置为"O";所有空格均被占满,则报告平局后退出。        (2)轮到人类选手时,get_player_move()函数要求对弈者输入想要落子的坐标(左上角是(1,1),右下角是

2017-11-24 18:13:14 1705

原创 共用体

共用体把几种不同数据类型的变量存放在同一块内存里。共用体中的变量共享同一块内存。    定义共用体类型变量的一般形式:        union 共用体名        {                成员列表        }变量列表;    与结构体类似,变量列表是可选的。如果没有变量列表,只是定义了一种共用体类型。

2017-11-22 19:23:20 4980 2

原创 结构体指针作函数的参数

以结构体指针作为参数,在函数中对age成员执行了加1操作。由于使用了指针作为参数,因此在函数内部对age值做的修改,使得数组的实际值也改变了。#includestruct student{ int number; char name[20]; char sex; int age; char addr[30];};//以结构体指针作为参数void print_stru

2017-11-22 19:15:37 1333

原创 结构体和指针

结构体中的各个成员是按顺序连续存放在内存中的。如果一个结构体指针指向结构体变量,结构体指针所保存的值是它所指向的结构体变量所占内存的首地址。struct student s1;//略去对s1进行赋值的代码//......struct student *p;p=&s1;printf("%d,%s",p->number,p->name);    在C语言中,为了方便和直观,往往把(*p

2017-11-22 18:59:29 276

原创 结构体和数组

结构体中可以有数组类型的成员,数组的元素也可以是结构体。数组和结构体的初始化是一样的,都是把各个元素放在一个大括号里,各个成员用逗号分隔。//结构体数组使用示例#include#includeint main(){ struct student { int number; char name[20]; char sex; int age; char add

2017-11-22 15:58:19 5854 1

原创 C语言的结构体

C语言中的基本数据类型有:整形、浮点型、字符型,复合数据类型:数组。还有一种构造数据类型,叫“结构体”。        声明结构体的形式:        struct 结构体名        {                成员列表        };        成员列表可以是C语言的任何数据类型,如:整形、浮点型、字符型、数组,指针,结构体、共用

2017-11-22 15:34:59 224

原创 C语言有关字符串处理的函数

(1)puts和gets        puts将一个字符串输出到屏幕上。gets从终端输入一个字符串到字符数组中。char a[]="Welcome to";char *p="Linux C Program";puts(a);puts(p);(2)strcpy和strncpy        #include         char *strcpy(char *

2017-11-22 14:31:34 240

原创 指向字符串的指针 ------ 字符串指针

(1)用字符数组存放一个字符串        char string[]="Linux C";        printf("%s\n",string);        string是一个字符数组名,它同时也是该字符数组的首地址。    (2)用字符串指针来指向字符串        如果不想定义字符数组,就可以只用一个指向字符串的指针,叫“字符串指针”,例如:

2017-11-21 21:46:03 3589 1

原创 函数指针做形参

函数的参数可以是指针,函数指针------指向函数的指针,也是指针,所以函数指针也可以做函数的参数。比如 int get_max(int i,int j,int k,int (*p)(int,int)); 这个函数接受4个参数,第4个参数即为一个指向函数的指针。在函数内可以通过该指针调用其他函数。    让我们举一个“栗子”:#include int get_big(int i,int

2017-11-21 20:47:31 3312

原创 指向函数的指针 ------ 函数指针(function pointer)

一个函数的函数名是一个指针,它指向函数的代码。函数的调用可以通过函数名,也可以通过指向函数的指针来调用。定义形式:        类型 (*指针变量名)(参数列表);例如:        int (*p)(int i,int j);    p是一个指针,它指向一个函数,该函数有2个整形参数,返回类型为int。p首先和*结合,表明p是一个指针。然后再与()结合,表明它指向的是一个

2017-11-21 13:23:17 94176 10

原创 指针用作函数的返回值

函数的返回值可以是整形,实型,或字符型,也可以返回指针,即一个内存地址。返回值是指针的函数定义形式为:        类型 *函数名(参数列表)    例如:        int *f(int i,int j);    调用上述函数后,返回一个指向整形变量的指针。()优先级高于*,因此f先与()结合,这表示f是一个函数。函数名前有一个*,表示此函数的返回值类型为指针。#inc

2017-11-21 12:51:07 2772

原创 指针用作函数的参数

函数的参数不仅可以是整形,字符型,实型也可以是指针类型。它的作用就是把一个变量的地址传送到一个函数中。#include void change(int i,int *p){ i++; if(p!=NULL) (*p)++;}main(int argc, char *argv[]){ int a=10,b=10; change(a,&b); printf("a=%

2017-11-21 12:32:19 264

原创 指针数组和二级指针

数组元素是指针类型的数组就称为指针数组。指针数组的每一个元素都是指针变量。定义形式:类型名 *数组名[数组长度],如:    int *p[10]    二级指针,就是指向指针的指针。#include int main(int argc, char *argv[]){ int a[5]={1,3,5,7,9}; int *p[5],i; int **pp=p;

2017-11-21 11:51:02 9737 1

原创 C语言中的指针和数组

指针和数组关系密切。数组名实际上就是指向数组第一个元素的指针。观察下面程序,p1和p2实际指向同一个内存地址。#include int main(int argc, char *argv[]){ int a[]={1,3,5,7,9}; int *p1=a; int *p2=&a[0]; printf("*p1: %u\n",p1); printf("*p2: %u\n",p

2017-11-20 22:30:13 197

原创 C语言的指针

char *p:这是定义了一个指向char型变量的指针,p存放的是一个char类型变量的地址,*p是取得指针p所指向的地址存储的值,&是取地址运算符,&c是取得变量c的地址。总结于下:        &:取地址运算符。        *:取指针所指向的内存单元的值。    对于程序中的每一个变量,编译程序时都要分配一块内存用于存储该变量的值。例如:        cha

2017-11-18 00:07:39 268

原创 C语言的二维数组、及多维数组的降维

二维数组的定义形式:数据类型 标识符[ ] [ ]    第一维一般称为“行”,第二维称为“列”。比如: float array[3][4]。    二维数组的初始化。    1. 将所有数据写在一个大括号内,如:    array[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};    数组逐行、逐列顺序地被赋予上述数值。    2.

2017-11-17 23:48:22 4055

原创 C语言的一维数组和字符数组

上文介绍的都是基本数据类型(整形、浮点型、字符型等),现在开始接触另外3种复合数据结构:数组、结构体、共用体。    数组和变量一样,也是先定义,后使用。数组定义的形式是类型名、标识符、维数。比如:int a[10],这就定义了一个含有10个整形元素的数组。    可以在定义数组的同时进行初始化,如:int a[]={0,1,2,3,4,5,6,7,8,9};这时就无需指定元素个数。

2017-11-17 19:09:07 2141

原创 C语言的变量-2

上文说到,全局变量的作用范围是从其定义开始,至程序结束为止。但在大型程序开发时,项目往往由多个源文件构成。某个源文件往往会用到其他源文件里定义的全局变量,这时应该怎么办呢?    这时我们就可以用“extern”关键字,对这个变量进行声明,告诉编译器,这个变量在其他地方是定义过的。//演示extern声明全局变量的用法//file1.c#include extern l

2017-11-17 18:51:53 222

原创 C语言的变量-1

1. 变量的作用范围    变量分为“全局变量”和“局部变量”。全局变量,就是定义在所有函数之外的变量。全局变量可以被该源文件内任何函数访问,其有效范围从该变量被定义开始到该源文件结束。C语言中的大括号{ }标识了变量的作用域。在作用域内,变量从被定义开始,到该右花括号结束,是其有效范围。作用域可以嵌套,但在内部的作用域会屏蔽掉其外层同名的变量。2. 变量的存储类别    根据

2017-11-17 18:27:10 408

原创 C语言函数的递归调用

一个函数在函数体内调用自己,就被称作递归调用,也即函数直接或间接地调用函数自身。函数的递归调用时一种很有用的编程技巧。有时可以使用递归来实现循环。对于某些问题,用递归的思路来解决问题,可以让问题更加清晰。    以下代码,分别用循环,和递归2种思路来求10的阶乘。//用循环实现#include main(){ int i; float f=1; for(i=1;i<=10;

2017-11-17 17:53:52 1020

原创 C语言输入输出函数

1. putchar 字符输出函数2. getchar 字符输入函数3. printf 格式化输出函数    printf用到的格式字符:d: 十进制整数o:八进制整数x: 十六进制整数u: 无符号输出整形f: 浮点数e: 科学计数法输出浮点数c: 一个字符s: 一个字符串4. scanf 格式化输入函数输入函数的格式字符同上。#incl

2017-11-17 17:10:39 336

原创 C语言系列学习笔记

1. 整形2. 浮点型3. 字符型    字符型实际对应的是一个8位的无符号整数,取值范围是0-255。比如A对应的ASCII码是65。#include int main(){ //整形 short int i; //短整型 int j; //整形 long int k; //长整型

2017-11-17 16:54:59 318

转载 pthread_create函数编译时报错:undefined reference to 'pthread_create'

转载自:http://blog.csdn.net/o929778452o/article/details/7241072?readlog错误:pthread_create函数编译时报错:undefined reference to 'pthread_create'pthread_create()和pthread_atfork()函数使用时应注意的问题:

2017-11-12 13:22:33 1397 1

转载 为什么说指针是 C 语言的精髓?

作者:知乎用户链接:https://www.zhihu.com/question/20125963/answer/104060886来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。no pains, no gains对C来说,指针、无越界检查等等是一切痛苦的根源;但这些痛苦并不是白白付出的。可以和汇编比效率(甚至可以做到“编译器自动

2017-11-02 23:23:47 456

仿照IP138无差错完整IP数据库

包含全球IP地址详细地址、手机号码归属地。翔实、可靠。

2013-07-25

C#实现QQ截图功能源代码

一个类似于QQ程序里截图的功能,采用C#语言。功能很强大完善,有完整的源代码。

2011-11-03

空空如也

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

TA关注的人

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