`

c语言复习笔记

阅读更多

指针部分:

 1.指针类型说明

main(){ 
	int *pa[10]; /* 定义指针数组pa,它由n个指向整型的指针组成 */
	
	int (*pb)[10]; /* pb为指向含10个元素的一维数组的指针变量 */
	
	int f(); /* f为返回整型的函数 */
	
	int *pf(); /* pf为返回指针的函数,该指针指向整型数据 */
	
	int (*ppf)(); /* ppf为指向函数的指针,该函数返回整型 */
	
	int *p; /* 指向整型的指针变量 */ 
	
	int **pp; /* pp是指针变量,它指向一个指向整型的指针变量 */ 
}

 

 2.指针加减运算说明

 	/* 指针的加减运算(只能对数组指针进行,其他类型的指针变量是无意义的) */
 	int *pt; 
	pt = pa+1; /* 数组后移一位 */
	pt = pa-1; /*数组前移一位 */
	pt = pa++;
	pt = pa--;
	pt = ++pa;
	pt = --pt;
	
	/* (在数组中!)两个指针变量可以相减,但不能相加!! */
	int *p1,*p2;
	p1 = array;
	p2 = &array[3];
	int num = p2 - p1; /* 代表两指针在数组中相隔的元素个数,(p2地址-p1地址)/单个元素长度 */ 
	//printf("%d\n",num); will print "3"

 

3.结构体

#include<stdio.h>

struct stu{
	int num;
	char name[20];
	char sex;
	float score;
};

struct stu boy1,boy2;
//#define STU struct stu 利用宏来定义一个符号常量 
/* 上述代码也可用以下方式表示 
struct stu{
	int num;
	char name[20];
	char sex;
	float score;
}boy1,boy2;
*/

//结构变量成员的引用是:结构变量名.成员名
//结构数组
struct stu boy[5];

//结构指针变量,值是所指向的结构变量的首地址。注意:结构指针变量和结构变量对成员名的访问形式不同 
struct stu *pStu;
//赋值 pStu = &boy1 
//访问形式:(*pStu).成员名 或 pStu->num 

//作为参数时,结构变量会将全部成员逐个传送,开销很大。最好用结构指针变量,只会传送地址
 
 

 4.内存管理函数

 a.分配内存空间函数 malloc

 调用形式:(类型说明符 *) malloc(size)

 

 b.分配内存空间函数 calloc

调用形式: (类型说明符 *) calloc(n,size)

在内存动态存储区分配n块长度为size字节的连续区域。

 

c.重分配内存空间函数 realloc

调用形式:(类型说明符 *) realloc(mem_address, newSize)

更改以前分配区的长度(增加或减少)。当增加长度时,可能需将以前分配区的内容移到另一个足够大的区域,而新增区域内的初始值则不确定

 

d.释放内存空间函数 free (注意:对于a,b,c分配的内存,不再用时,必须用free函数释放)

调用形式:free(void *ptr)

 

5.枚举类型

 定义:enum enumName{var1, var2, var3};

        或通过 typedef 来定义:

 

typedef enum [enumName]{
   var1, var2, var3
}[enumTypeName]; //这里的enumTypeName和第一行的enumName,两者选一,或两者都存在,都是可以的
 

 枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,默认第一个为值为0,也可在定义时赋值,如:

enum enumName{var1 = 1, var2, var3}; 则往后递增值。

赋值:

 enum enumName varName;
 varName = var1;

 link: http://www.cnblogs.com/JCSU/articles/1299051.html ,有更详细说明。

 

 

6.文件

 从用户角度分,普通文件和设备文件。

 从文件编码分,ASCII文件和二进制文件。ASCII文件每个字符对应一个字节。

文件指针在C语言中用一个指针变量指向一个文件。定义:

FILE *fp;

 文件操作由库函数完成,主要有:

文件打开函数:

文件指针名 = fopen(文件名, 使用文件方式);

 文件使用方式有:

 "rt" rt+ wt wt+ at at+

 "rb" rb+ wb wb+ ab ab+

其中 t 代表文本文件(可不写),b 代表二进制文件。但在操作时会把文本文件转成二进制再读写,所以文本文件效率较低

打开文件常用代码:

if((fp = fopen("c:\\tmp.txt","rb") == NULL){
 printf("\nError on open c:\\tmp.txt\n");
 getch();
 exit(1);
}

 

文件关闭函数:

fclose(文件指针);

正常关闭返回0,返回非0则出错。

 

文件读写函数:

a.读字符函数 fgetc

ch = fgetc(fp);

 

b.写字符函数 fputc

 

fputc(字符量, 文件指针);

 

c.字符串读写函数 fgets 和 fputs

  读字符串函数 fgets 从指定的文件中读字符串到字符数组中。

 

fgets(字符数组名, n , 文件指针);
 

  n表示从文件中读出字符串不超过n-1个字符。在读入最后一个字符后加上串结束标志'\0'。

  在读出n-1个字符前,如遇到换行符或EOF,则结束读操作,返回值是字符数组的首地址。

 

写字符串函数 fputs

 

fputs(字符串, 文件指针);

 

d.数据块读写函数 fread 和 fwrite

 

fread(buffer, size, count, fp);
fwrite(buffer, size, count, fp);

 buffer 是指针,存放待读写数据的首地址;size 是数据块的字节数; count 表示要读写的数据块块数。 fp 表示文件指针。

  例如:fread(buf, 4, 5, fp); 代表从fp所指文件中,每次读4个字节(一个实数)送入实数组buf中,连续读5次,即读5个实例到buf中。

 

e.格式化读写 fscanf 和 fprintf

fscanf(文件指针, 格式字符串, 输入表列);
fprintf(文件指针, 格式字符串, 输出表列);
例如: fscanf(fp, "%d%s", &i,s);

 

f. 文件随机读写 rewind 和 fseek

  rewind(文件指针); //把文件内部的位置指针移到文件首。

  fseek(文件指针, 位移量, 起始点); //位移量指移动字节数,long。起始点有三种:文件首,当前位,文件尾,分别用数字0,1,2表示。另fseek一般用于二进制文件,因为在文本文件中要进行转换,计算位置常出错。

 

另:

 int sscanf(const char *buffer,const char *format[,argument ]...);

  buffer 存储的数据   format 格式控制字符串   argument 选择性设定字符串   sscanf会从buffer里读进数据,依照argument的设定将数据写回。

 

   int sprintf( char *buffer, const char *format [, argument] … );

  返回值:字符串长度(strlen)

 

 

 

--------------------------------------------------------------------------------------------------------------

 

《C程序设计语言》笔记

1.8

当把数组名作为参数时,传递给函数的值是数组的起始元素的位置或地址--并不复制数组本身,在被调用的函数中,可以通过数组下标访问或修改数组元素的值。

 

1.10

在函数内部定义的 int a; 称为自动变量(局部变量)。

 

在函数外定义的 int b; 称为外部变量,其值在程序运行期间一直存在,可在全局范围内访问。每个访问外部变量的函数,需要声明相应的外部变量。声明时可显式声明(extern int b),也可通过上下文隐式声明(在同一源文件中,如果外部变量的定义出现在它的函数之前,那么可以不用extern)。如果外部变量在file1定义,file2和file3要用extern声明。

 

人们通常把变量和函数的extern声明放在一个单独的文件中(头文件 .h)。

 

定义:define,表示创建变量或分配存储单元。

声明:declaration,说明变量的性质,但并不分配单元。

 

2.1

C语言只提供了四种基本类型:char int float double。(short和long是限定符)

 

储存字符串的物理存储单元数比括在括号中的字符数多一个。

 

枚举是一个常量整型值的列表。例如:enum boolean{NO, YES};(默认NO 为0,YES为1)

枚举为建立常量值与名字之间的关联提供一种便得的方式。

 

const限定符:指定变量的值不能修改。对数组而言,指定数组的所有元素的值都不能修改。

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics