您的位置:首页 > 编程语言 > C语言/C++

[2014.3.18]C语言中的static关键字

2014-03-18 00:31 337 查看
看了一些资料,现在初步的结论是这样的:

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 c语言 语法 static 静态