C语言复习知识汇总(三之文件、位运算)

C复习-完结篇(文件、位运算)

文章为博主复习中认为易忘、使用频率高、重要的知识,欢迎各位发现问题、提出纠正

  1. 文本文件:
    (1)优点:一个字节对应一个字符,便于各种文本编辑工具查看和修改
    (2)缺点:读写文件时,需要花费时间在内存的二进制数据与文件的ASCII码数据之间进行转化;
    二进制文件:
    (1)优点:不需要进行数据格式转换
    (2)缺点不便于查看
  2. 缓冲文件系统(标准文件系统):通过缓冲区可以一次与磁盘交换一批数据,而不是每执行一次输入/输出就访问磁盘一次,这样可以减少对磁盘的实际读写次数,节省访问时间。一般缓冲区大小为512字节(即0.5KB),当缓冲区写满了512字节,操作系统自动将全部数据写到磁盘的一个扇区中,然后清空缓存区。
  3. FILE *fp;
    fp = fopen(“文件名”,“文件打开方式”);

    其中常用文件打开方式有:

“r”:只读,打开一个已存在的文本文件,读数据
“w”:只写,建立一个文本文件,写数据
“a”:追加,向文本文件末尾追加数据,若文件不存在,则建立
二进制文件只需在后面加’b’,如“rb"

  1. 常用文件函数:

(1)fputc(字符,文件指针);–>将字符写入fp指向的文件中
(2)字符变量 = fgetc(文件指针);–>从指定文件中读取一个字符到字符变量中
(3)fclose(文件指针);–>用fclose()函数关闭文件,即使缓冲区没有写满,操作系统也会强制将缓冲区数据写入磁盘,确保数据不丢失
(4)feof(文件指针);–>库函数,用于判断是否读到了文件末尾
(5)fputs(字符串, 文件指针);–>向指针文件写入一个字符串,字符串结束标志’\0’不写入文件
(6)fgets(字符数组名, n, 文件指针);–>从指定文件读取n-1个字符到字符数组中
(7)fscanf(文件指针, 格式控制字符串, 输入项地址列表);
(8)fprintf(文件指针, 格式控制字符串, 输出列表);
(9)rewind(文件指针);–>使文件的位置指针重新指向文件开头
(10)fseek(文件指针, 指针量, 起始点);–>以起始点为基础,将文件的位置指针向前或向后移动指定的“位移量”。起始点值:0代表文件开头,1代表当前位置,2代表文件末尾
(11)ftell(文件指针);–>获取文件位置指针的当前位置

  1. C语言源程序处理的完整过程:C源程序–>编译预处理–>编译–>连接–>执行。编译预处理命令以“#”开头,包括宏定义、文件包含和条件编译
  2. 宏替换在程序运行之前完成,不占用运行时间,程序执行效率高(如果是作函数意义的宏,效果更明显,原本的函数调用时在程序运行时进行的,需要经过复杂的处理过程)

(1)无参数的宏定义:#define 宏名 字符串–>编译预处理会自动把源程序中出现的宏名用“宏体”去替换,称为宏替换,字符串称为宏体
(2)有参数的宏定义:#define 宏名(形参列表) 字符串–>编译预处理时,不仅要对宏名进行展开,而且展开时要用实参去替换对应的形参

  1. 有参数的宏定义中,整个宏体和每个形参最好用括号括起来,避免替换时出错,如

#define M(a) a*4
M(3+4)实际为3+4*4,结果为19
#define M(a) (a)*4
M(3+4)实际为(3+4)*4,结果为28

  1. 在宏定义的字符串中,可以使用已经定义过的宏名,在宏展开时将逐层替换,程序中双引号内与宏名相同部分不作宏展开
  2. 文件包含命令有两种使用格式:
    #include <文件名>
    #include "文件名"
    (1)使用<>括号的文件一般是编译系统的头文件,预处理程序会直接到编译系统绑定的头文件目录中去查找
    (2)使用“”引号的文件一般是用户编写的文件
    文件包含允许嵌套,即在一个被包含的文件中又可以包含另一个文件
  3. union 共用体名{
    类型说明符 成员名1;
    类型说明符 成员名2;

    类型说明符 成员名n;}
    定义共用体变量x后,系统会为它分配内存空间,按照共用体中最大成员所占用字节数来分配的。因为占用同一内存空间,修改一个成员的值,其他成员值也跟着改变。不能像初始化结构体变量那样对它进行初始化,如:

union data a={1,2,3}–>错误

  1. rand()函数用来生成随机数–>stdlib.h头文件中
    system()函数–>stdlib.h头文件中
    exit()函数–>stdlib.h头文件中
    abs()函数–>math.h头文件中(求整数的绝对值,返回整数
    fabs()函数–>math.h头文件中(求浮点数的绝对值,返回浮点数
  2. enum 枚举名 {枚举元素列表};
    enum 枚举名 变量列表;
    变量的值只能取枚举中的元素。枚举元素在定义时就已经由系统自动分配了一个整数值,第一个枚举元素值为0,后面顺序+1,也可以人为修改;对于没有修改的枚举元素,其值在前一个基础上+1

enum week{Sun =7, Mon, Tue};
即Sun = 7, Mon = 8, Tue = 9

  1. 枚举变量或者枚举常量的值输出都是整数,应该用整型格式说明符
  2. typedef定义已有类型的别名,别名与标准类型名一样
    typedef 原类型名 新类型名;
    typedef struct 结构体名 新类型名;
    typedef struct{ 结构体} 新类型名;
  3. 位段是指变量所占用的以位为单位的一块区域,位段不能单独定义,必须存在于结构体中。

struct 结构体名{
类型 位段名1:长度1;

类型 位段名n:长度n;};
(1)类型只能是int 或unsigned,长度是每个位段所占用的二进制位数。
(2)在位段定义中可以不指定位段名,表示该区域暂时保留,以备今后使用。无名位段不可访问
(3)位段的长度可以设置为0,表示其后的位段从下一个字节开始存放
(4)一个位段的长度不能超过一个存储单元的长度(即int型数据所占字节数),并且一个位段必须存储在同一个存储单元中,不能跨两个单元。如果第一个单元的剩余空间不能容纳下一个单位,则该空间不用,从下一个单元起存放该位段
(5)在定义位段的结构体中可以包含非位段成员

  1. ’&'位与运算符:
    当对应的两个二进制位都为1时,运算结果该位才是1

    可以用来将操作数的某些位清0(将该位与0进行与运算),或者保留某些位(将该位和1进行与运算)
  2. ’|'位或运算符:
    当对应的两个二进制位都为0时,运算结果该位才是0

    可以用来将操作数的某些位变成1(将该位与1进行或运算),或者保留某些位(将该位和0进行或运算)
  3. ’^'位异或运算符:
    当对应的两个二进制位不同时,运算结果该位才是1

    可以用来将操作数的某些位翻转(将该位与1进行异或运算),或者保留某些位(将该位和0进行异或运算)
  4. ’~'位反运算符:
    将操作数按位取反,即0变1,1变0
  5. ’<<'位左移运算符:
    将操作数按指定位数左移,左移高位丢弃,右边空出的低位补0

    左移n位,相当于该数乘以2n
  6. ’>>'位右移运算符:
    将操作数按指定位数右移,右移低位丢弃,左边高位:

    (1)操作数无符号时,左边高位补0
    (2)操作数有符号时,正数补0,负数补1
    右移n位,相当于该数除以2n

C语言告一段落,归纳的知识点希望各位读者喜欢
博主编辑不易,点个赞再走吧!!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值