static的用法详解--C语言和C++分别介绍

来源:互联网 发布:石家庄企业办公软件 编辑:程序博客网 时间:2024/05/23 13:53

先上一道题目:
下面程序的输出是( )?
#include < stdio.h>
int fun3(int x)
{
static int a=2;
a+=x;
return(a);
}
void main()
{
int k=2,m=1,n;
n=fun3(k);
n+=fun3(m);
printf(“%d\n”,n);
}
本题分析:本题考查关键点是static,后面会对此进行详细的分析。本题需要注意的是,static只对元素初始化一次。
答案:9,因此第二次调用函数的时候,a=4,不再进行初始化。

C 语言的 static 关键字有三种(具体来说是两种)用途:

静态局部变量:

用于函数体内部修饰变量,这种变量的生存期长于该函数

static是在全局数据区分配的,那么它存在的意思是什么?
答:它存在的意义就是随着第一次函数的调用而初始化,却不随着函数的调用结束而销毁。
static是在什么时候进行初始化:
它是在第一次调用语句时进入函数的时候初始化一次。且只初始化一次,也就是第二次再调用语句时,不会继续初始化,而直接跳过。

静态局部变量和全局变量有什么区别?
相同点:两者都是初始化一次,存放在全局数据区(也称静态区)。
异同点:全局变量不属于函数本身,不再受函数的控制,而静态局部变量隶属于函数。

静态局部变量保存在全局数据区,而不是保存在栈中,每次的值保存到下一次调用,直到下次赋新值。

静态全局变量:

定义在函数体外,用于休息修饰全局变量,表示该变量只在本文件可见。

特点:静态全局变量不能被其它文件所用(全局变量可以);
其他文件中可以定义相同名字的变量,不会发生冲突,因为static隔离了文件。

静态函数:

静态函数跟静态全局变量作用类似:

总结:

上面一共说了三种用法,为什么说准确来说是两种呢?
1.一种是修饰变量,一种是修饰函数,所以说是两种(这种解释不多)。
2.静态全局变量和修饰静态函数的作用是一样的,一般合并为一种。(这是比较多的分法)。

C++ 语言的 static 关键字有二种用途:

1. 静态数据成员:

使用方法: static int s_sum; //在数据成员前加关键字

用于修饰class的数据成员,即所谓“静态成员”。这种数据成员的生存期大于class的对象。静态数据成员是每个class有一份,普通数据成员是每个实体一份,因此静态数据成员也叫做类变量,普通数据成员叫做实例变量。

对于非静态数据成员,每个类对象(实例)都有自己的拷贝。而静态数据成员被当作是类的成员,由该类型的所有对象共享访问,对该类的多个对象来说,静态数据成员只分配一次内存。
静态数据成员存储在全局数据区。静态数据成员定义时要分配空间,所以不能在类声明中定义。

2。静态成员函数:

用于修饰class的成员函数

使用方法: static void GetSum() //在函数名前加static

那么静态成员函数有特点呢?
1.静态成员之间可以相互访问,包括静态成员函数访问静态数据成员和访问静态成员函数;
2.非静态成员函数可以任意地访问静态成员函数和静态数据成员;
3.静态成员函数不能访问非静态成员函数和非静态数据成员;
4.调用静态成员函数,可以用成员访问操作符(.)和(->)为一个类的对象或指向类对象的指针调用静态成员函数,也可以用类名::函数名调用(因为他本来就是属于类的,用类名调用很正常)

转载地址:http://blog.csdn.net/majianfei1023/article/details/45290467
特别鸣谢~

原创粉丝点击