1.bool是一种数据类型
2.取值为true或false
3.定义:bool iscollide=false
4.内存大小占1字节
注意:该类型的取值不仅仅只能用true或false,还可以是一个数值,这个值遵循非零为真的原则
1.内联函数是一个函数,是通过内存膨胀减少函数的跳转时间,以及空间换时间。(类似于带参宏,也是以空间换时间,没有入栈出栈)
2.内存膨胀:指的是代码区的代码变多,因为使用内联函数之后,那么这个函数的调用就不会在栈区申请内存来运行,也就是减少了入栈出栈的时间,如果是一个普通函数在调用的时候会有入栈和出栈
inline int getNum()
{
return 1;
}
//定义一个内联函数也就是在定义函数的时候在返回值类型前面加上一个inline修饰函数
1.它是一个函数,调用和普通函数一样
2.通过内存膨胀来减少函数的跳转(用空间换时间)
3.函数体代码过长或者函数体中有循环,不建议使用内联(这样占用的代码空间过大)
4.函数体是简单的赋值语句或者返回语句,而且使用频率高,建议使用内联
- #include
- inline void fun()
- {
- printf("duwd");
- }
- #define aa printf("dwd")
- int main()
- {
- fun();
- //用空间换时间,意思是fun函数里面的代码就是在main()主函数里执行的,不是调用的意思。所以减少了入栈出栈的时间。
- aa;
- return 0;
- }
1.内联函数在这里类似于宏替换,但是他们是有区别的,
2.内联函数是一个函数,是在程序执行期间运行的,没有函数的入栈出栈。
3.而宏替换是在预处理阶段执行的,本质是替换
4.内联函数有形参类型,有返回值类型和返回值。带参宏的形参是没有类型,没有返回值类型也没有返回值
引用是对一个变量或者对象取的别名
- int a=10;
- //引用
- //真名的类型& 别名 = 真名
- int& val=a;
- val=99;
- printf("%d\n",a;)//99
既然是对一个变量或者对象取别名,那就先得有变量或者对象,不能凭空取一个别名,也就是定义引用必须初始化。
1.引用是别名,所以定义引用的时候需要初始化
2.对引用的操作和对引用对应的变量的操作是完全等价的
3.引用的 & 不是取首地址,而是起到标志的作用
4.引用的类型必须和其所对应的变量的类型相同
5.引用不是定义新的变量或对象,因此不会为引用开辟新的空间内存
在效率上是没有多大的区别的
1.引用是别名,不会被分配空间。
指针是实体,会被分配空间)(32位的机器,指针分配4个字节)
2.引用在定义时必须初始化
指针定义时可以不用初始化(不过一般要赋空,防止成为野指针)
3.指针有多级指针,但是没有多级引用
4.引用是直接访问-直接访问变量
指针是间接访问-通过变量的地址来访问变量
(指针存放了变量的地址,通过访问这个地址取出变量的值,进而来访问变量)
- //数组的引用
-
- int arr[10] = { 10 };
- int(&x)[10] = arr; //arr的类型 int [10]
- printf("%d\n", x[0]);
函数重载指的是,在同一个项目中定义的函数名字可以重复,也就是可以有同名的函数,但是要满足条件才能重名
1.函数名必须一致
2.函数的参数列表不同:
|、参数列表个数不同
||、各个参数相对应位置的类型不同
注意:函数重载满足上述条件就可以了,函数的返回值不同不在条件内容。也就是函数返回值不同,参数列表相同,这是不可行的,编译器分辨不出。
- void fun(int a,int b)
- {
- printf("我是第一个函数");
- }
- void fun()
- {
- printf("我是第二个函数");
- }
- //上面两个函数构成函数重载---参数列表个数不同
-
- void fun1(int a,double b);
- void fun1(double a,int b);
- //也构成函数重载--参数相对应位置的类型不同
-
-
- //函数的重载容易导致的二义性及解决
- void fun2(int a)
- {
- printf("1\n");
- }
- void fun2(float a)
- {
- printf("2\n");
- }
- int main()
- {
- fun2(2);
- fun2(2.3f);
- //必须加上f,才是调用的第二个函数
- }
- //调用时实参强转类型---fun2((float)2.3)
- //编译器总是会帮助我们吧基本数据类型大的转为小的
顾名思义,在声明函数的某个参数的时候为之指定一个默认值,在调用该函数的时候如果采用默认值,就无须指定该参数(也可以指定该参数)。
- void fun(int a,int b=10)
- {
- printf("%d %d",a,b);
- }
- int main()
- {
- fun(1,5);
- //输出1 5
- fun(1);
- //输出1 10
- }
1.缺省函数只能由后往前一个一个缺省
2.缺省值必须是常量
3.函数如果只有定义,需在定义的参数列表中指明缺省函数。如果函数有定义和声明,则缺省函数只需在声明中指明即可
- void fun(int a,int b=10)//声明
- int main()
- {
- fun(1,5);
- //输出1 5
- fun(1);
- //输出1 10
- }
- void fun(int a,int b)//定义
- {
- printf("%d %d",a,b);
- }
- void add(int a,int b,int c=10);
- void add(int a,int b);
- //在调用第二个函数是会出现二义性问题
- //解决方法:
- //把第一个函数的缺省参数去掉
- //不实现函数重载