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

1 篇文章 0 订阅

看了一些资料,现在初步的结论是这样的:


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.成员:

非静态的属于对象,静态的属于类,即使类还没有创建任何对象,静态成员也存在。

在类外访问静态成员只能通过“类名::成员”的方式。

静态成员函数内不能谈及普通成员,这是当然的,因为静态成员函数不知道你说的是哪个对象的成员。

(总之,编写静态成员函数时,时刻记着现在是以“类名::成员"来调用的,编写非静态成员函数时,记着现在是从对象的角度来看的)


初步就这样吧,网上七拼八凑的,可能有不对的,没试验过。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值