1、static全局变量与普通全局变量有什么区别?
全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式,这两者在存储方式上并无不同。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。两者区别在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的;而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它,即使使用extern。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。
2、static局部变量和普通局部变量有什么区别?
把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。函数中static局部变量的值在该函数调用结束后不消失而保留原值,即其占用的存储单元不释放,在下次该函数调用时,该变量保留上一次函数调用结束时的值。
3、static函数与普通函数有什么区别?
static函数与普通函数作用域不同,仅在本文件。只在当前源文件中被其它函数所调用的函数应该说明为(static)内部函数。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件。
static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝。
4、静态数据成员和普通数据成员有什么区别?
每建立一个新对象时都会为各自的普通数据成员分配内存空间,但静态数据成员在内存中只占一份空间,为每个对象所共享,而不属于某一个对象,在为对象所分配的空间中不包括静态数据成员所占的空间,它是在所有对象之外开辟空间的。
静态数据成员在程序编译时被分配空间,到程序结束时才释放空间,与对象的建立撤销无关。而普通数据成员,在声明类时它们是不占内存空间的,只在定义对象时才为对象的数据成员分配空间。
静态数据成员只能在类体外进行初始化,可以通过对象名或者类名引用。
5、静态成员函数和普通成员函数的区别?
本质区别是非静态成员函数有this指针,而静态成员函数没有this指针。
当调用一个对象的普通成员函数时,系统会把该对象的起始地址赋给普通成员函数的this指针,而静态成员函数不属于某一对象,也没有this指针,也就不能指向某一对象,就无法对一个对象中的非静态数据成员进行默认访问。
静态成员函数和静态数据成员一样,是类的一部分,而不是对象的一部分。静态成员函数可以直接引用本类的静态数据成员。