第1节课:bool、引用、内联函数、函数重载、函数参数缺省
文章目录
一、bool
1.知识点的介绍:
1.bool是一种数据类型
2.bool类型的变量的值只能够为true或者是false
3.内存:一个字节的大小
4.注意:只有1为true其他取值都为0(false)
也就是说:遵循的原则:非零即真
2.定义:
bool isTrue = true;
bool istrue1 = false;
bool istrue2 = 2;//istrue == false;
bool istrue3 = 1;//istrue == true;
bool istrue4 = 0;//istrue == false;
二、内联函数
1.知识点:
1.内联函数指函数通过内存膨胀来(代码区的空间变多)减少函数调用的开销,以空间换取时间
2.内联函数不同于宏定义,宏定义是在预处理阶段,进行的一些替换的工作,而内联函数则是在程序执行到要调用内联函数的时候,将内联函数的代码替换到调用的地方
3.内存膨胀:代码区内存变多,函数调用时和普通函数相比,就不用申请栈区内存来运行函数,减少了函数出栈入栈的时间
2.定义:
inline int Myadd(int a, int b)
{
return a + b;
}
3.使用:
1.函数体内容不能过多,不能有循环;
2.简单的一句赋值语句或者是return语句,而且调用频率比较高都可以用内联函数
3.通过膨胀代码区的空间来减少调用函数的跳转,减少时间开销
4.也是函数,和普通函数的调用一样
4.review:
内存四区:全局变量区,代码区,栈区,堆区
三、引用
1.知识点:
引用就是给一个以及定义好的变量或者是对象取别名
2.定义:
int a;
int &typename_a = a;//引用定义时候必须要初始化 , 给a取别名typename_a
3.使用:
1.必须先定义好变量才可以取别名
(给一个人去外号的前提是这个人得存在)
2.定义引用的时候必须初始化
(取外号你得指明这个外号是给谁取的)
3.引用和原变量是同一内存,也就是说不会给定义引用不会开辟内存
(给rose取了一个外号肉肉,肉肉和rose是同一个人,不是说肉肉是rose复制品,如果是这样的话,那都可以娶rose当老婆了)
4.对引用的操作就相当于与对原变量的操作
(你亲肉肉一下就相当于亲了rose本人一下)
5.引用的类型必须和原变量的类型必须一样
4.指针和引用的区别:
1.效率差不多,但是定义一个指针会开辟四字节的空间,而引用和原变量是同一内存
2.引用在定义的时候必须初始化,而指针无所谓;
3.引用是直接访问,指针是间接访问
4.指针有多级指针,引用没有
5.review:
C语言中定义一个变量就会给它分配空间,即使没有初始化也会给它分配空间
四、函数重载
1.知识点:
两个或者以上的函数可以函数名相同,满足一定的条件它们构成重载;
构成重载的条件:参数列表不同
(1)参数的个数不一样
(2)参数的类型不一样
2.定义:
void fun(int a, int b);
void fun(int a);
void fun(float a);
//返回值类型不同不构成重载
void fun(int a);
int fun(int a);
3.使用:
1.根据传递的参数确定调用哪个重载函数
2.缺省值必须是常量
3.如果一个函数只有定义,那么在定义出要指明缺省,如果有声明则在声明出指出,定义处不用
4.函数重载调用时产生的二义性:
int fun(int a){return a;}
int fun(float a){return a;}
int main()
{
fun(2.3);//2.3系统默认是double类型,所以不知道要调用哪个函数
//1.编译器会将其按照内存最小的类型转在调用
//2.用户进行类型强转
fun((int)2.3);
return 0;
}
五、函数参数缺省
1.知识点:
顾名思义,参数列表中的参数赋值默认值
2.定义:
void fun(int a, int b = 0);
void fun(int a = 1, int b);//这种缺省有问题,会产生二义性
3.使用:
1.只能从后面往前面缺省,不然会出现二义性;
2.参数列表有两个参数,缺省一个,则调用时候,可以传一个参数(另一个参数为默认值),也可以传两个参数(两个参数的值都是传进来的值)
4.函数重载和函数参数缺省造成的二义性:
int fun(int a, int b = 0);
int fun(int a);
fun(1);//出现二义性
//到底调用哪个呢??
//解决方法:
1.只能够传两个参数进去
2.去掉其中一个