int total,counter;
float average;
average=(float)total/counter;
1此表达式中包含了一个强制类型转换符float。它将为它的操作数total产生一个浮点数据类型的副本、注意:在这个转换中,变量total中保存的仍然是整数。同时,由于算术运算符
中要求操作数的类型是一致,所有counter在编译时会被提升为float类型、注意:counter中的数据不变,仍然是产生一个counter浮点数据类型的副本。
2.强制类型转换符与一元运算符+,-(+,-是正负符号)有相同的优先级,都比乘法*除法/和取余%运算符高一个等级。
3.在计算两个班级的平均成绩后,想比较是否相等(成绩用浮点数表示),这时用==比较是没有意义的,浮点数一般都是不相等的!(因为计算出来的小数的小数点后面的位数一般是很多的,很难相等,可以比较其差是否在某个范围之类,例如fabs(a-b)<0.1)
4.伪代码,逐步求精的方法在解决算法过程中是很有用的,好好体会。
5.C语言中的内存机制
在C语言中,内存主要分为如下5个存储区:
(1)栈(Stack):位于函数内的局部变量(包括函数实参),由编译器负责分配释放,函数结束,栈变量失效。
(2)堆(Heap):由程序员用malloc/calloc/realloc分配,free释放。如果程序员忘记free了,则会造成内存泄露,程序结束时该片内存会由OS回收,但程序只要不结束,就有可能造成内存泄露。
(3)全局区/静态区(Global Static Area): 全局变量和静态变量存放区,程序一经编译好,该区域便存在。并且在C语言中初始化的全局变量和静态变量和未初始化的放在相邻的两个区域(在C++中,由于全局变量和静态变量编译器会给这些变量自动初始化赋值,所以没有区分了)。由于全局变量一直占据内存空间且不易维护,推荐少用。程序结束时释放。
(4)C风格字符串常量存储区: 专门存放字符串常量的地方,程序结束时释放。
(5)程序代码区:存放程序二进制代码的区域。
6.C++语言中的内存机制
在C++语言中,与C类似,不过也有所不同,内存主要分为如下5个存储区:
(1)栈(Stack):位于函数内的局部变量(包括函数实参),由编译器负责分配释放,函数结束,栈变量失效。
(2)堆(Heap):这里与C不同的是,该堆是由new申请的内存,由delete或delete[]负责释放。
(3)自由存储区(Free Storage):由程序员用malloc/calloc/realloc分配,free释放。如果程序员忘记free了,则会造成内存泄露,程序结束时该片内存会由OS回收。
(4)全局区/静态区(Global Static Area): 全局变量和静态变量存放区,程序一经编译好,该区域便存在。在C++中,由于全局变量和静态变量编译器会给这些变量自动初始化赋值,所以没有区分了初始化变量和未初始化变量了。需要说明一点,全局静态变量和局部静态变量都是存储在同一个静态区(全局区),只是作用域不同。
(5)常量存储区: 这是一块比较特殊的存储区,专门存储不能修改的常量(一般是const修饰的变量,或是一些常量字符串)。
7.程序调用一个函数时,被调函数必须知道如何返回主调函数,其是用栈来实现的。调用函数时,返回地址被压入栈中,在函数执行过程中,函数中产生的局部变量也同时加入到栈中,函数返回时,会执行pop局部变量,ret指令(这些都是c默认实现的,想想汇编中出函数时都要先弹出局部变量,在ret到主调函数的执行地址)。由于计算机内存是固定的,其堆栈大小也有限制,当连续调用函数超过一定的上限,会造成堆栈溢出。
8.c语言中当对象的唯一指针在栈中,而此指针被pop时,没有删除对象,则会造成此对象无法访问,内存泄露。在java中,不会出现泄露问题,因为当一个对象唯一指针被删除后,java的垃圾回收机制会释放此对象。
9.静态变量的特点:
1、程序一开始就分配内存空间并初始化(分配在静态区,默认初始化为0),这点类似于全局变量,但是不同点是全局变量的可见性是全局的,而静态变量的可见性根据其定义的位置而定,与普通变量的可见性定义是一样的。
2、静态变量或函数只能被定义的cpp文件使用,其他文件是无法访问的。
10.友元函数的特点
友元函数不是类的成员函数,但是它可以通过对象名访问该类的私有成员。友元函数提高了类的使用效率,但是破坏了类的封装和数据隐藏,可能给程序的重用带来隐患。
直白的说:友元函数的函数体中,可以直接使用(类名。变量名)的方式对类的变量进行访问。而不需要通过public函数来取得变量。
11.
ADT抽象数据类型(abstract data type),是数据逻辑特性的描述,是独立于实现的,抽象数据类型有不同的实现方法(不同的存储结构)和不同的算法(具体的存储结构对应的具体的操作方法)
12.模板的申明 模板类的申明在类定义之前添加模板 template <typename T>,模板函数的什么在函数之前添加template <typename T>,....加的是一样的...