总结一下面试中常见的两个问题:static关键字作用,指针和引用的区别
Static关键字的作用
1、c语言中的作用
(1)隐藏:一个被声明为静态的变量和函数可以被文件内所有函数访问,但不能被文件外其他函数访问,即使该变量作了extern声明;
(2)Static局部变量只初始化一次,在重复调用函数数,使用的是Static局部变量下一次结果的值;也就是static所在语句只执行一次,之后遇到这条语句就直接跳过了
(3)存储在静态存储区,默认初始化为0,这是与堆栈区变量的重大区别;
(4)static全局变量只初始化一次,防止在其他文件单元中被引用;
(5)static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝.
2、c++中的作用
静态数据成员:
(1)静态数据成员可以实现多个对象之间的数据共享,它是类的所有对象的共享成员,它在内存中只占一份空间,如果改变它的值,则各对象中这个数据成员的值都被改变。
(2)静态数据成员是在程序开始运行时被分配空间,到程序结束之后才释放,只要类中指定了静态数据成员,即使不定义对象,也会为静态数据成员分配空间。
(3)静态数据成员可以被初始化,但是只能在类体外进行初始化,若为对静态数据成员赋初值,则编译器会自动为其初始化为0
(4)静态数据成员既可以通过对象名引用,也可以通过类名引用。
静态成员函数:
(1)静态成员函数和静态数据成员一样,他们都属于类的静态成员,而不是对象成员。
(2)非静态成员函数有this指针,而静态成员函数没有this指针。
(3)静态成员函数主要用来方位静态数据成员而不能访问非静态成员。
指针和引用的区别
(1)引用在创建时需要初始化,指针不必;
(2)引用在初始化后不能被修改为另一个对象的引用,指针可以;
(3)引用不能使用指向空值的引用(注:不能有引用的值为NULL),必须总是指向某个对象,指针可以;
(4)引用不需要测试合法性,指针需要。
(5)指针是一个实体,需要分配内存空间。引用只是变量的别名,不需要分配内存空间。
(6)有多级指针,但是没有多级引用,只能有一级引用。
(7)指针和引用的自增运算结果不一样。(指针是指向下一个空间,引用时引用的变量值加1)
(8)sizeof引用所得到的是所指向的变量(对象)的大小,而sizeof指针得到的是指针本身的大小。
(9)引用访问一个变量是直接访问,而指针访问一个变量是间接访问
(10)可以有const指针,但是没有const引用;