好了,我们现在来复习C语言程序设计,因为是复习,所以我只把一些需要注意的地方列出来。
●
● 在C程序中,只有十进制可以是负数,而八进制和十六进制只能是不带符号的整数。
● 在C语言中字符串常量都是以字符’\0’作为结束标志的。
● C语言的变量名区分大小写。
● 带符号整数在内存中是以补码表示的,补码=取反+1.
● 大小写字母ASCII码值相差32.
● 自左至右的结合方向,称为左结合性;相反,则称为右结合性。如x=y=z,由于=的右结合性,应先执行y=z再执行x =(y=z)运算。
● ++i, 先增减后运算, i++, 先运算后增减。
● 数据类型转换关系示意图
● 逗号表达式,求值过程是从左至右分别求各个表达式的值,并以最后一个表达式的值作为整个逗号表达式的值。
● 按位异或:相对应的二进制不同时,结果为1,相同时结果为0.
● 字符数据的输入与输出:getchar() putchar()
● printf(“%m.nf\n”) 对于float或double类型的浮点数可以用m.n的形式在指定宽度的同时来指定其精度。其中m用以指定输出数据所占总的宽度,n称为精度。
● if与else的配对关系:从最内层开始,else总是与前面最近的并且没有与其他匹配的if相匹配。
● continue语句和break语句的区别:continue语句只结束本次循环,而不是终止整个循环语句的执行;break语句则是终止整个循环语句的执行,跳出所在的循环体,转到循环语句外的下一条语句去执行。
● *p– 相当于 *(p—)
● strlen 返回字符数组的实际长度,不包括’\0’
● C语言中规定,以下情况可以省去主调函数中对被调函数的声明:
1.如果被调函数的返回值是整型或字符型时,可以不对被调函数作声明,而直接调用。这时系统将自动对被调函数返回值按整型处理。
2.当被调函数的函数定义出现在主调函数之前时,在主调函数中也可以不对被调函数再作说明而直接调用。
3.如在所有函数定义之前,在函数外预先说明了各个函数的类型,则在以后的各主调函数中,可不再对被调函数作说明。
● 函数的指针和指向函数的指针变量:
1.指向函数的指针变量的定义
类型标识符 (*指针变量)();
int (*fp)(); //fp为指向int函数的指针变量
2.指向函数的指针变量的赋值
指向函数的指针变量=[&]函数名;
3.用函数指针变量调用函数
(*函数指针变量)([实参表]);
4.指向函数的指针变量作函数参数
Sub(f1,f2); //调用函数Sub(),并将函数f1()和f2()的入口地址作为实参
Sub(int (*x1)(int), int(*x2)(int ,int))
{
int a,b,i=1,j=2;
a = (*x1)(i); //调用f1函数
b = (*x2)(i,j);
}
● extern 只能用来说明外部变量,而不能用来定义变量,他只是说明其后的变量是在程序的其他地方已经定义的外部变量,因此,不能用extern来初始化变量。
extern 类型标识符 函数名(函数参数表);
● 宏定义不是C语句,不必在末尾加上分号。若加了分号,则连分号一起替换。
● #include “” 和 #include <> 的区别:
使用尖括号表示在包含文件目录中去查找(包含目录是由用户在设置环境时设置的),而不是在源文件目录去查找;使用双引号则表示首先在当前的源文件目录中查找,若未找到才到包含目录中去查找。
● struct 结构体名
{
结构体成员表;
}结构体变量名表={初始化数据};
struct 结构体名 变量名;
● 指向结构体变量的指针:
struct 结构体名 *结构体指针变量名;
(*结构体指针变量名).结构体成员名
结构体指针变量名->结构体成员名
● void *malloc(unsigned int size);
void *calloc(unsigned n,unsigned size);
void free(void *p);
● union 共用体名
{
成员名表;
}共用体变量名表;
union 共用体名 变量名;
1.由于共用体变量中的各个成员公用同一段内存空间,因此在任一时刻,只能有一种类型的数据存放在该变量中,即在任一时刻,只有一个成员的数据有意义。
2.共用体变量的地址和它的各成员的地址都是同一地址。
3.不能对共用体变量名赋值,也不能引用变量名来得到一个值,也不能在定义共用体变量时对它进行初始化。
● enmu 枚举标识符{常量列表};
常量值不可重复。
● typedef声明新的类型名来代替已有的类型名。
typedef int INTERGER;
typedef struct student
{
}student;
student stu;
● 文件操作:
文件指针:
FILE *指针变量标识符;
文件的打开:
文件指针名 = fopen(文件名,使用文件方式);
文件的关闭:
fclose(文件指针);
字符输入输出:
fgetc(文件指针) getc() fputc(ch,文件指针) putc()
字符串输入输出:
fputs(字符串,文件指针)
fgets(str,n,fp); //从fp所指的文件中读取4个字符送入字符数组str中,最后一个字符加上’\0’
数据块输入输出函数:
fread(buffer,size,count,fp); //从fp所指文件读入count个数据,每个数据占size个字节。
fwrite(buffer,size,count,fp); //向fp所指文件写入count个数据,每个数据占size个字节。
格式化输入输出函数:
fscanf(文件指针,格式字符串,输入表列);
fprintf(文件指针,格式字符串,输出表列);
文件的定位与随机读写:
rewind(文件指针); //把文件内部的位置指针移到文件首。
fseek(文件指针,位移量,起始点);
fseek(fp,100L,0); //把位置指针移到离文件首100字节处
fseek(fp,-20L,1); //把当前位置指针向文件首方向移动20字节
fseek(fp,-30L,2); //把位置指从文件尾向文件头方向移动30字节
文件检测函数:
feof(文件指针); //判断文件是否结束,文件结束返回1,否则返回0;
ferror(问你件指针); //检查文件在用各种输入输出函数进行读写是否出错,如返回0,表示未出错,否则出错。
clearerr(文件指针); //用于清除出错标志和文件结束标志,使他们为0;