一.指针和数组的区别
1.数组:是一系列相同数据的集合,是开辟连续的内存空间,sizeof是数组占用内存的大小,而并非是数组中元素的个数。
2.指针是地址,存放变量的地址,sizoef占用的内存大小和操作系统有关,32位是占用4个字节,64位是占用8个字节。
二.使用const的好处
提高代码安全性。提高代码的可读性和可维护性。提高程序的效率。
三、指针和引用的区别
相同点:
1.都是地址的概念;
2.指针指向一块内存,它的内容是所指内存的地址;
3.引用是某块内存的别名。
不同点:
1.指针是一个变量,存储的是变量的地址,引用是给变量起一个别名。
2.指针可以为空,引用一经定义必须初始化。
3.指针可以改变指向,但是引用初始化之后不可以改变指向。
4.指针可以有多级操作,但是引用只有一级。
5.sizeof指针得到的是本指针的大小,但是引用得到是引用所指向变量的大小。
6.不存在指向空值的引用,但是有指向空值的指针。
四、对于static关键字的用法
对于函数内部,当不用static关键字修饰的时候,它是存放在栈区,当函数调用结束后,局部变量就销毁了。
而当使用static修饰了函数中变量,它存放在静态存储区,当整个程序执行期间,它分配的空间一直存在,只不过外部是无法访问的。这与全局区
使用static修饰的全局变量不同,他是本文件可以进行访问,同样,在整个程序期间的所分配的控件都存在。
五、函数重载
函数重载的三个条件,相同函数名的参数个数不同、参数类型不同、参数顺序不同满足其中一个即可。
那么当函数返回值类型不同可以作为函数重载,答案是不同。但是函数重载可以是返回值类型不同。
原理:c++编译器在链接的时候,找到汇编之后生成.o文件里面的符号表,进行链接,main函数能通过函数传参的不同找到它需要调用函数的地址。
六、虚函数的实现原理
虚函数的用法:可以让派生类重写基类的成员函数实现多态。虚函数实现多态的机制,严格来说是动态多态,是在运行期间实现的。
虚函数的实现原理:每个虚函数都会有一个与之对应的虚函数表,该虚函数表的实质是一个指针数组,存放的是每一个对象的虚函数入口地址。对于一个派生类来说,它会继承基类的虚函数表,同时增加自己的虚函数入口地址,如果派生类重写了基类的虚函数的话,那么会继承过来的虚函数入口地址将被派生类的重写函数入口地址代替。那么在程序运行时发生动态绑定,将父类绑定到实例化的对象实现多态。
七、析构函数可以是虚函数吗?
可以
当基类的指针指向派生类对象,如果delete掉该指针,那么就会调用该指针指向的派生类析构函数,然后派生类析构函数又自动调用析构函数,这样派生类的对象才被完全释放干净。如果不声明虚析构函数,会导致派生类对象释放不完全。
八、构造函数可以是虚函数吗?
不可以
因为调用构造函数之后才可以生成一个对象,假设构造函数是虚函数,因为虚函数存在虚函数表中,但是虚函数表又需要虚函数表指针去找,但是虚函数指针是存放在对象中的,这就前后矛盾.
九、宏和内联函数的区别
1.宏定义不是函数,但是使用起来像函数,宏是在预处理阶段的。内联函数是在编译阶段的。
2.内联函数里面不允许有开关语句、控制语句和循环语句。
3.宏相当于是直接替换,是没有类型检查的。但是内联函数是在编译阶段进行类型检查的。
标签:函数,指向,汇总,面试,地址,引用,派生类,指针 From: https://www.cnblogs.com/lihongbing1997-1004/p/17106552.html