外部文件和内部文件
- 外部文件:指磁盘文件,也是通常所谓的文件。
- 内部文件:指在程序中运行的文件,更正式的称谓是“文件流对象”。
- 程序中操作的是内部文件,最后保存的是外部文件。
文本文件和二进制文件
- 文本文件:由字符序列组成,以字符(character) 为存取最小信息单位,也称“ASCII码文件”。
- 二进制文件:由二进制数组成。
2、打开文件,在文件流对象和磁盘文件之间建立联系。
例如:
ifile.open( "d:\my_in_file.txt" );
ofile.open( "d:\my_out_file.txt" );
说明:
- 双引号中的字符串(如"d:\my_in_file.txt" )为磁盘文件路径名。
- 通过输入文件流对象(如ifile)或输出文件流对象(如ofile)打开指定磁盘文件,将在文件流对象和磁盘文件之间建立联系。
- 输入/输出文件流对象都被称为“内部文件”,即和对应磁盘文件联系的“虚文件”。
3.对文件进行读写操作。
- 文件读写在文件缓冲区中进行。
- 最常见的文件读写是顺序的,即从文件头开始进行。
- 顺序读写可用C++的提取运算符(>>)和插入运算符(<<)进行;也可以用读字符的get()和读字符串的getline()等函数进行。
4.关闭文件。
文件操作结束后,应该显式地关闭该文件,与打开文件相对应,例如:
ifile.close();
ofile.close();
关闭文件时,系统把与该文件相关联的文件缓冲区中的数据写到磁盘文件中,保证文件的完整;同时把磁盘文件名与文件流对象之间的关联断开,可防止误操作修改了磁盘文件。
对文件进行操作,必须在程序前增加一句: #include<fstream>
二。全局变量和局部变量
操作系统为一个C++程序的运行所分配的内存分为四个区域,如下图所示:
三。。。
变量存储类型
1、自动存储类型:包括自动变量和寄存器变量。
- 自动变量:用auto说明的变量,通常auto省略。前面提到的局部变量都是自动类型。其生命期开始于块的执行,结束于块的结束。自动变量的空间分配在栈中,在程序运行过程中,块开始执行时系统自动分配空间(未初始化时值为随机数),块执行结束时系统自动释放空间。因此,自动变量的生命期和作用域是一致的。
- 寄存器变量:说明时用register修饰,如:register int i; 系统将这样说明的变量尽可能保存在寄存器中,以提高程序运行速度。但不同的编译器对哪些变量可以说明为寄存器变量有不同的规定,而且一般的编译器都会对寄存器的使用进行优化,所以不提倡使用寄存器变量。
2、静态存储类型: 用static说明的变量称为“静态变量”。
- 静态变量均存储在全局数据区,如果程序未显式给出初始化值,系统自动初始化为全0,且初始化只进行一次;
- 静态变量占有的空间要到整个程序执行结束才释放,故静态变量具有全局生命期。根据定义的位置不同,还分为“局部静态变量”和“全局静态变量”,也称“内部静态变量”和“外部静态变量”。其中,局部静态变量是定义在块中的静态变量,当块第一次被执行时,编译器在全局数据区为其开辟空间并保存数据,该空间一直到整个程序结束才释放。该变量具有局部作用域,但却具有全局生命期。
如调用malloc()或用new运算符为变量分配存储空间时,变量的生命期开始;而调用free()或用delete运算符释放空间或程序结束时,变量生命期结束。
外部存储类型:用extern说明的变量。
其他文件如果要使用某个文件中定义的全局变量和函数,应该在使用前用“extern”作外部声明,表示该全局变量或函数不是在本文件中定义的。
内联函数
即定义内联函数,方法是在定义函数时用修饰词inline。