计算机之路————C语言基础快速复习4
文件操作:
数据保存在文件中,不受数量的限制;运行时不必重新输入,直接使用文件中的数据。
文件是数据集合体。与外部设备,磁盘文件关联,即与操作系统的文件关联。数据,外部设备一律用文件来管理。
文件名: 主文件名.扩展名
扩展名可以确定文件类型。
.c是C语言的源程序文件
.cpp是C++源文件
.h头文件
.jpg
.txt
.doc
等等
绝对文件名
相对文件名
文件分类:
顺序文件
随机文件
普通文件
设备文件:各种外设(显示器,打印机,键盘等等)(操作系统中把外部设备一律作为文件来处理)
ASCII文件/文本文件/TEXT文件
二进制文件(如果用记事本打开二进制文件无法读懂内容!)
实际上,ASCII文件,二进制文件都是用二进制编码进行保存。不同的是编码和解码方式。
所有文件都可以理解为是二进制文件
文件指针:
C语言为每个文件都开辟一个存放文件有关信息的区域,该区域类型是一个FILE类型的结构体类型。(头文件stdio.h)
用一个指向FILE的指针来标识具体文件,这个指针的类型是FILE*,即文件指针
常量:
NULL————值为0,表示打开文件失败!!!
EOF————值为-1,表示文件结束或者文件操作出错!
流程:打开文件----操作文件----关闭文件
打开文件:
FILE* fp=fopen("文件名","打开模式"); //若失败返回NULL
写文件名时候,盘符后面两个反斜杠!!,后面的一个反斜杠即可!
打开模式:
"r" 只读
"w" 只写/新建 ,原内容删除!
"a" 只写/新建(附加)(原内容不删除)
"r+" 可读
"w+" 可写,原内容删除!
"a+" 可写/新建(可附加)(原内容并不删除)
"rb" 所有加上字母b的表示针对二进制文件进行操作
"wb"
"ab"
"rb+"
"wb+"
"ab+"
关闭文件:
fclose(fp); //若出错返回EOF
对于文本文件操作:
写字符:fputc(int ch, 文件指针); //若出错返回EOF
写字符串:fputs(char*str,文件指针); //若出错返回EOF
格式化写:fprintf(文件指针,"格式控制符如%d%s", 参数值); //若失败返回一个负数。成功则返回写入字符数量
//写操作进行后自动移动指针
读字符:fgetc(文件指针);//返回字符的ASCII码,int型。失败返回EOF
读字符串:fgets(char*str,int num,文件指针);//读字符串(字符数量为num个)读到字符数组str中
格式化读:fscanf(文件指针,"格式控制符",参数列表如&a&b);从文件读到参数列表中,相当于给参数列表赋值(&a)
//读操作进行后自动移动指针
对于二进制文件操作:
写数据块函数:fwrite(字符数组指针,要写的每个数据块长度,数据块数量,文件指针);
读数据块函数:fread(字符数组指针,要读的每个数据块长度,数据块数量,文件指针 );
定位函数:
调整指针位置:
rewind(文件指针);会是指针指向文件开始
fseek(文件指针,偏移量,起始位置);
偏移量>0指针会向尾部移动,小于零会向文件首移动
起始位置:SEEK_SET(0)表示文件开始处
SEEK_CUR(1)当前位置
SEEK_END(2)表示文件结尾
说明当前位置:
ftell(文件指针); 给出当前位置
feof(文件指针);是否到达了文件末尾;若到达文件末尾了返回EOF
动态数据:
存储成为动态的,链式结构可以满足要求
动态变量—————在程序运行时,由申请空间函数(malloc)随机地动态申请的变量,由释放空间函数(free)释放。没有名字,用指针标识。
涉及到用户程序的内存结构:
栈区空间(自动存储类别的数据和变量)
堆区空间(malloc申请的动态申请的变量)
库代码空间
静态区空间
目标代码空间
void* malloc(size);//返回的是void*类型,必须要进行强制类型转换。
free(ptr);//释放空间
动态数据结构:
一个数据项:
struct t{
基本数据部分
struct t* next;
};
链表
单向,双向,环形,双向环形
向链表头添加数据
遍历
检索
插入
栈
弹栈
压栈
队列
出队
入队
树
图
强制终止程序:exit(0);表示正常退出。exit(n)是非正常退出,并将n传给操作系统。
程序参数:
DOS下exe文件执行方式:(以copy.exe文件为例)
copy 源文件名 目标文件名
在该copy.exe程序中,main函数带有参数。void main(int argc,char* argv[]);
void main(int argc,char* argv[]);
argv是个数组指针,argv[0]指向第一个参数,argv[1]指向第二个参数......
args表示参数个数。
可以在main函数体当中使用参数argc与argv[](形参)
共用体union:
结构体与共用体的本质差别就是,结构体类型中的所有成员一个接一个顺序分配存储空间,互不冲突。
共用体类型中的所有成员占用公共的存储空间,各个成员的存储空间是重叠的。(所有成员公用一块空间,不可以同时对各个成员分配!)