c语言中static的语义
1.static变量:
1).静态局部变量
a.静态局部变量在函数内定义,生存期为整个源程序,但作用域与局部变量相同,只能在定义该变量的函数内使用。退出该函数后, 尽管该变量还继续存在,但不能使用它。
b.对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。
2).静态全局变量
全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。但是他们的作用域,非静态全局 变量的作用域是整个源程序(多个源文件可以共同使用); 而静态全局变量只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。
2.static函数(也叫内部函数):
只能被本文件中的函数调用,而不能被同一程序其它文件中的函数调用。
3. 在C语言中,由于没有类的概念,所以没有静态成员一说,在c中static的作用主要有2个:
一是隐藏功能,对于static修饰的函数和全局变量而言,其作用于局限于所在的文本,不能被其他文本内的函数使用
二是保持持久性功能,对于static修饰的局部变量而言,其存储区变更到静态存储区,程序结束不销毁
并且,因为存放在静态区,全局和局部的static修饰的变量,都默认初始化为0。
c++语言中static的语义
在c++中,由于面向对象的思维,它与C语言中的作用有一些不同,有了类中静态成员的说法。静态成员不属于对象,而属于类。不创建对象也可调用。从代码形式上来说没有任何区别。普通类成员函数与静态成员函数的区别在于普通成员函数有一个隐藏的调用参数(this)指针。所以就是说静态成员函数没有对象也可调用。
对类的静态和非静态函数的不同的调用要求决定了它们在使用上的方便程度:
非静态成员函数要通过对象调用,所以要求首先建立一个对象;
而静态成员函数可不建立对象就可以被使用。
另外,如果类的成员函数想作为回调函数来使用,一般情况下只能将它定义为静态成员才行。