博文
文件使用方式(2006-10-03 16:47:00)
摘要:文件使用方式 含义
"r"(只读) 为输入打开一个文本文件
"w"(只写) 为输出打开一个文本文件
"a"(追加) 向文本文件尾增加数据
"rb" 为输入打开一个二进制文件
"wb" 为输出打开一个二进制文件
"ab" 向二进制文件尾增加数据
"r+" 为读/写打开一个文本文件
"w+" 为读/写建立一个新的文本文件
"a+" 为读/写打开一个文本文件
"rb+" 为读/写打开一个二进制文本
"wb+" 为读/写建立一个新的二进制文件
"ab+" 为读/写打开一个二进制文件......
文件类型指针FILE(2006-10-03 16:11:00)
摘要:文件指针类型的声明:
typedef struct{
short level; // 缓冲区“满”或“空”的程度
unsigned flags; // 文件状态标志
char fd; // 文件描述符
unsigned char hold; // 如无缓冲区不读取字符
short bsize; // 缓冲区的大小
unsigned char *buffer; // 数据缓冲区的位置
unsigned char *curp; // 指针,当前的指向
unsigned istemp; // 临时文件,指示器
short token; // 用于有效性检查
}FILE;......
虚函数的几点说明(2006-07-02 23:31:00)
摘要:(1)、把基类中的成员函数定义为虚函数后,在其派生类中定义的虚函数必须与基类中的虚函数同名,且参数的类型、顺序、个数必须一一对应,函数的返回值的类型也要相同。若函数名相同,但参数的个数或者参数的类型不同时,属于函数的重载,而不是虚函数。
(2)、必须使用基类的指针变量来调用虚函数时才能实现动态多态性。基类指针指向不同的派生类对象时,调用该指针所指向的虚函数时,尽管调用的形式一样,但实际调用的函数是不同的。
(3)、虚函数必须是类的成员函数,不能是友元函数,也不能是静态的成员函数。
(4)、在其派生类中没有重新定义基类中的虚函数时与一般的成员函数一样,当调用这种派生类对象的虚函数时,仍调用其基类中的虚函数。
(5)、可把析构函数定义为虚函数,但不能将构造函数定义为虚函数。把析构函数定义为虚函数时,释放基类指针所指向的动态对象时,实现撤消动态对象时的多态性。
(6)、调用虚函数比调用一般的成员的执行速度要慢一些。实现虚函数调用的机制是间接的,在程序执行期间根据基类指针所指向的实际对象,才能确定应该调用的成员函数,这种调用效率要低一些。
......
子类型关系的基类和派生类对象的赋值兼容规则(2006-06-25 21:29:00)
摘要:(1)、派生类的对象可以赋值给基类的对象,即把派生类对象中从基类继承来的成员,逐个赋值给基类对象的成员。
(2)、派生类的对象可以初始化基类的引用。
(3)、派生类的对象的地址可以赋值给指向基类的指针。......
const型指针变量(2006-06-15 23:44:00)
摘要: 有三种不同的方法来说明const变量,其作用和含义都是不同的。
第一式:将const放在指针变量的类型之前。表示指针变量所指向的数据是一个常量,即不能改变指针变量所指向的数据值,但可以改变指针变量的值。
int x, y;
const int *p = &x;
*p = 24; // ERROR
p = &y; // OK
第二式:将const放在指针变量的*后。表示指针变量的值是一个常量,即不能改变指针的值,但可以改变指针变量所指向的数据值。
int n, i;
int *const p = &n;
*p = 25; // ok
*p = &i; // error
第三式:把一个const放在指针变量的类型之前,将另一个const放在指针变量的*后。表示指针变量的值是一个常量,指针变量所指向的数据也是一个常量。二者都不能改变。
int j, k;
const int *const pp = &j;
*pp = 25; // error
pp = &k; // error
const类型的指针主要用做函数的参数,以限制在函数体内不能修改指针变量的值,或不能修改指针所指向的数据值。......
C89和C99标准比较(2006-05-14 18:08:00)
摘要: 1、增加restrict指针
C99中增加了公适用于指针的restrict类型修饰符,它是初始访问指针所指对象的惟一途径,因此只有借助restrict指针表达式才能访问对象。restrict指针指针主要用做函数变元
,或者指向由malloc()函数所分配的内存变量。restrict数据类型不改变程序的语义。
如果某个函数定义了两个restrict指针变元,编译程序就假定它们指向两个不同的对象,memcpy()函数就是restrict指针的一个典型应用示例。C89中memcpy()函数原型如下:
void *memcpy (void *s1, const void *s2, size_t size);
如果s1和s2所指向的对象重叠,其操作就是未定义的。memcpy()函数只能用于不重叠的对象。
C99中memcpy()函数原型如下:
void *memcpy(void *restrict s1, const void *restrict s2,size_t size);
通过使用restrict修饰s1和s2变元,可确保它们在该原型中指向不同的对象。
2、inline(内联)关键字
内联函数除了保持结构化和函数式的定义方式外,还能使程序员写出高效率的代码.函数的每次调用与返回都会消耗相当大的系统资源,尤其是当函数调用发生在重复次数很多的循环
语句中时.一般情况下,当发生一次函数调用时,变元需要进栈,各种寄存器内存需要保存.当函数返回时,寄存器的内容需要恢复。如果该函数在代码内进行联机扩展,当代码执行时
,这些保存和恢复操作旅游活动会再发生,而且函数调用的执行速度也会大大加快。
函数的联机扩展会产生较长的代码,所以只应该内联对应用程序性能有显著影响的函数以及长度较短的函数。
3、新增数据类型
_Bool
值是0或1。C99中增加了用来定义bool、true以及false宏的头文件夹<stdbool.h>,以便程序员能够编写同时兼容于C与C++的应用程序。在编写新的应用程序时,应该使用
<stdbool.h>头文件中的bool宏。
_Complex and _Imaginary
C99标准中定......