《2017年11月16日》【连续037天】
标题:动态内存分配和内联函数,重载函数,函数参数缺省值的学习;
内容:A.观看MOOC(三)1.3,1.4;
B.(a)动态内存分配:
P =new T; T 是任意类型名,P是类型为T*的指针;
分配出大小为sizeof(T)字节的内存空间,并将该空间的起始地址赋值给P。
例:int *pn; pn=new int; *pn = 5;
P =new T[N];
动态分配出大小为sizeof(T)*N字节的内存空间,并将该内存空间的起始地址赋值给P。
例:int*pn;int i=5; pn =new int[i*20]; pn[0]=20; pn[100] =30; //编译没问题,但运行时会数组越界,数组下标最大为99
用“new”动态分配的内存空间可用delete释放;
delete 指针;//该指针必须指向new的空间
例:int*p=new int; *p =5; delete p; delete p; //异常,同一空间不能delete多次;
delete [ ] 指针;//不加[ ],数组的空间可能删除剩余,产生垃圾空间;
new的返回值是该类型名的指针;
(b).内联函数,函数重载,函数缺省参数:
为了避免函数调用的时间开销(当函数体小,但需要多次执行时),可用内联函数;
inline int Max(int a,int b)
{if(a>b) return a; return b;}
函数重载:
多个函数,名字相同,但参数个数或参数类型(即参数表)不相同,叫函数的重载;
int Max(double f1,double f2){ }
int Max(int n1,int n2){ }
int Max(int n1,int n2,int n3){ }
编译器会自行判断要执行哪个程序,但如果编译器根据参数找不到相应的函数,会报错,二义性;
函数的缺省参数:
void func( int x1,int x2 =2,int x3 =3){ }
func(10 ); //等效于 func(10,2,3)
func(10,8); //等效于func(10,8,3)
func(10, ,8); //错误,只能最右边的连续若干个参数缺省;
明日计划: 枚举例题的练习;