[2014.3.18]C语言中的static关键字
2014-03-18 00:31
337 查看
看了一些资料,现在初步的结论是这样的:
static关键字在不同的地方意思是完全不一样的,虽然都叫static。
1. 局部变量:
不论静态还是非静态,都是函数内可见。
但是静态的,一旦创建,一直有效,即使函数执行完了,它也没有消失,值也没变。之后再次遇到创建它的语句,直接忽略;
非静态的,函数执行完时,它就消失了。
【典型例子】
2.函数和全局变量:
非静态的在全工程可见,静态的只在本文件内可见。这就是驱动程序里函数和全局变量大都声明成static的原因。
3.成员:
非静态的属于对象,静态的属于类,即使类还没有创建任何对象,静态成员也存在。
在类外访问静态成员只能通过“类名::成员”的方式。
静态成员函数内不能谈及普通成员,这是当然的,因为静态成员函数不知道你说的是哪个对象的成员。
(总之,编写静态成员函数时,时刻记着现在是以“类名::成员"来调用的,编写非静态成员函数时,记着现在是从对象的角度来看的)
初步就这样吧,网上七拼八凑的,可能有不对的,没试验过。
static关键字在不同的地方意思是完全不一样的,虽然都叫static。
1. 局部变量:
不论静态还是非静态,都是函数内可见。
但是静态的,一旦创建,一直有效,即使函数执行完了,它也没有消失,值也没变。之后再次遇到创建它的语句,直接忽略;
非静态的,函数执行完时,它就消失了。
【典型例子】
int fun(int n) { static int f= 1; f=f*n; return f; } void main() { int i; for(i =1;i <=5;i++) printf("%d ", fun(i)); }第一次调用fun函数时创建了f=1,fun函数结束时它既没有消失值也没变,以后再次调用时遇到“static int f=1”这句话直接忽略。程序输出1 2 6 24 120
int fun(int n) { int f= 1; f=f*n; return f; } void main() { int i; for(i =1;i <=5;i++) printf("%d ", fun(i)); }f不是静态的了,fun函数执行完毕时它就消失,下次调用fun时被重新创建。程序输出1 2 3 4 5
2.函数和全局变量:
非静态的在全工程可见,静态的只在本文件内可见。这就是驱动程序里函数和全局变量大都声明成static的原因。
3.成员:
非静态的属于对象,静态的属于类,即使类还没有创建任何对象,静态成员也存在。
在类外访问静态成员只能通过“类名::成员”的方式。
静态成员函数内不能谈及普通成员,这是当然的,因为静态成员函数不知道你说的是哪个对象的成员。
(总之,编写静态成员函数时,时刻记着现在是以“类名::成员"来调用的,编写非静态成员函数时,记着现在是从对象的角度来看的)
初步就这样吧,网上七拼八凑的,可能有不对的,没试验过。
相关文章推荐
- C语言中的声明以及static关键字
- C语言中几个关键字(inline,volatile,static)
- 简单介绍C语言中auto,register,static,const,volatile,extern等几个关键字的作用
- c语言关键字学习之 static register inline volatile
- C语言中关键字auto、static、register、const、volatile、ex...
- C语言学习入门 (七) 变量与函数,static和extern关键字
- 【C语言 C++】简单关键字Register,Const,Static,Volatile,typedef,Define的理解
- C语言中几个关键字(inline,volatile,static)
- 关键字static在c语言下的理解
- C语言中关键字auto、static、register、const、volatile、extern的作用
- C语言中关键字static的作用
- [ZZ]C语言中的static关键字总结
- C语言static 关键字浅析!
- C语言中的static关键字
- 程序员——C语言之结构体、枚举、预处理和static,extern关键字 易错知识点
- C语言中static关键字的神奇之处
- C语言中的static和extern关键字——【链接属性】和【存储类型】角度解析
- C语言中存储类型和Static关键字
- C语言中关键字auto、static、register、const、volatile、extern的作用
- C语言中关键字auto、static、register、const、volatile、extern的作用