函数特性:
1. 函数参数是可以有默认值的。
void fun(int i,int j= 5,int k =10);
有默认参数值的参数必须在参数表的最右端.
无实参则用默认值,否则实参覆盖默认值.
2. 函数重载:
在相同作用域下:
同一个函数名、参数个数和参数类型不同
e.g:
int getMax(int x,int y,int z)
double getMax(double x,double y)
3. 内联函数:
和普通的函数的主要区别是在调用上:
普通函数:main()--(1)-->调用fun()--(2)-->fun()--(3)-->--(4)-->调用fun()--(5)-->结束
内联函数: 编译时将函数体代码和实参代替函数调用语句。【注意是在编译的时候省掉了上述的(2)和(4)步骤,节省运行时间】
(说白了,就是把函数的代码在编译的时候就替换掉调用的地方)
关键字:inline
为什么不是所有的函数都使用内联方式?:
- 内联编译是建议性的,由编译器决定。
- 逻辑简单、调用频繁的函数建议使用内联函数。
- 递归函数无法使用内联方式。
c++内存管理:申请/归还内存资源
1.内存的本质:资源
2.内存资源的掌控者:操作系统
3.开发者能做的关于资源:申请/归还。【高级语言像java有jvm进行GC】
内存的申请和释放:
- 申请内存:new
- 释放内存:delete
new 和delete是运算符而不是函数。
申请和释放"某一个类型"的内存:
- 申请内存: int *p = new int;
- 释放内存: delete p;
申请和释放 “块”内存:
- 申请块内存:int *arr = new int[10];
- 释放块内存: delete [ ]arr;
内存操作注意事项:
c中内存管理方式:
- 申请:void *malloc(size_t size);
- 释放: void free(void *memblock);
c++中内存管理方式:
- 申请:new
- 释放: delete
配套使用,不要混搭。
申请内存是否一定成功?
存在风险的,操作系统可能现在的内存已经用完了,没有办法给予更多的内存,需要我们对这种情况进行处理。
int *p = new int[1000];
if(NULL == p){
// 内存分配失败
// 异常处理
}
delete [] p ;
p = NULL;
//------------------------
int *p = new int;
if(NULL == p){
// 内存分配失败
// 异常处理
}
delete p ;
p = NULL;
释放内存的注意:
实际操作时,申请内存除了要判断分配内存失败的情况外,在失败的时候也要注意匹配,并在释放完内存后将相应的指针赋值为NULL避免莫名奇妙的错误。如果释放完内存指针还指向相应的内存,此时如果不小心又调用了一次delete,就会使得同1块内存被重复回收,计算机就会出现异常。