一、new-delete以及malloc-freequbie
1.new:
(1)运算符,没有返回值概念,但开出来空间有类型,不需要设置大小
(2)可以在堆区动态开辟空间,并且可以默认执行构造函数2.delete:运算符,后面只需更上指针变量名,默认调用析构函数,后面只需跟上指针变量
3.malloc:
(1)函数,参数需要传入开辟空间字节大小,返回值为void*——通用类型指针,所以赋值需要强制转换
(2)可以在堆区动态开辟空间,但是没有走构造函数,就没有赋值
4.free:函数,需要传递通用类型指针做参数
二、值传参-指针传参 -引用传参
值传参:
1.值的拷贝,函数调用的时候,形参数有一个和实参数据字节相同的变量(执行函数过程中产生临时变量)2.所有函数内逻辑对数据产生变化都是基于这个临时变量(局部变量),所以函数结束以后,数据修改不会保留,函数运行结束,会收回所有临时变量
//值传参
void swap(int a,int b)
{
int temp=0;
temp=a;
a=b;
b=temp;
cout<<"值传参:x="<<a<<" y="<<b<<endl;
}
指针传参:
1.地址的拷贝,函数调用时,32位系统下无关数据类型只占4个字节,64位系统8个字节2.因为拷贝的是地址,当操作逻辑修改数据也是修改原地址上的数据,所以当函数结束以后,会收回所有临时变量,但原地址上的数据修改已经发生保留下来
//指针传参
void swap2(int *a,int *b)
{
int temp=0;
temp=*a;
*a=*b;
*b=temp;
cout<<"指针传参:x="<<*a<<" y="<<*b<<endl;
}
结论:
1.指针传参比值传参更加节省内存
2.指针传参可以保留函数所有操作的修改变化,但值传参不会
引用传参
int x=100;
//引用类型
//特殊变量,可以认为是一个变量的别名
int &y=x;//普通变量赋值与上面的区别:引用y不占空间,但z会占空间
int z=x;
//引用传参(C++推荐写法)
//语法和值传参一样,但结果可以和指针传参一样
void swap3(int &a,int &b)
{
int temp=0;
temp=a;
a=b;
b=temp;
cout<<"引用传参:x="<<a<<" y="<<b<<endl;
}
三、函数重载
函数重载:又叫函数多态,体现多态性
1.形参的类型不同
2.形参的顺序不同
3.形参的数量不同
4.形参的数量和类型不同
例如:(类型不同)
void swap2(char a,int *b);
void swap2(int a,int b);
四、内联函数
//内联函数:没有实际函数空间,在调用函数的地方插入逻辑代码
//不能写复杂的逻辑,循环、switch、数组、动态开空间、递归都不可以用
inline Max(int a,int b)
{
return a>b?a:b;
}
小知识点:
//带默认值,加默认值从右往左写
int sum(int a,int b,int i=100)
{
return ++i;
}