C/C++(static)

出自:http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777441.html

静态全局变量作用范围在一个文件内,程序开始时分配空间,结束时释放空间,默认初始化为0。

用法1:函数内部声明的static变量,可作为对象间的一种通信机制
    如果一局部变量被声明为static,那么将只有唯一的一个静态分配的对象,它被用于在该函数的所有调用中表示这个变量。这个对象将只在执行线程第一次到达它的定义使初始化。
用法2:局部静态对象
    对于局部静态对象,构造函数是在控制线程第一次通过该对象的定义时调用。在程序结束时,局部静态对象的析构函数将按照他们被构造的相反顺序逐一调用,没有规定确切时间。
用法3:静态成员和静态成员函数
    如果一个变量是类的一部分,但却不是该类的各个对象的一部分,它就被成为是一个static静态成员。一个static成员只有唯一的一份副本,而不像常规的非static成员那样在每个对象里各有一份副本。同理,一个需要访问类成员,而不需要针对特定对象去调用的函数,也被称为一个static成员函数。
  类的静态成员函数只能访问类的静态成员(变量或函数)。

1.static作用

  对于函数,static仅仅改变函数的链接属性,也就是隐藏函数的作用。

  对于变量,static修改变量链接属性、默认初始化为零、分配内存空间的位置(静态存储区:程序开始时分配空间,结束时释放空间)

#include <stdio.h>
/*
对于本文件,下方声明方式与将声明放在头文件,并使用预编译指令#include包含该头文件,本质相同。
*/
//声明变量
extern int count;
//声明函数
int fun(void);
int main(void)
{
printf("global\t\tlocal static\n");
for(; count <= ; ++count)
{
printf("%d\t\t%d\n", count, fun());
}
return ;
}
//变量实现
int count = ;
//函数实现
int fun(void)
{
static int count = ; // 事实上此赋值语句从来没有执行过
return count--;
}

  术语static有着不寻常的历史.起初,在C中引入关键字static是为了表示退出一个块后仍然存在的局部变量。随后,static在C中有了第二种含义:用来表示不能被其它文件访问的全局变量和函数。为了避免引入新的关键字,所以仍使用static关键字来表示这第二种含义。最后,C++重用了这个关键字,并赋予它与前面不同的第三种含义:表示属于一个类而不是属于此类的任何特定对象的变量和函数(与Java中此关键字的含义相同)。

上一篇:在linux下新增一块硬盘的操作。(包含大于2T的硬盘在linux下挂载操作)


下一篇:android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!从此在andrid中*使用 图像匹配、识别、检测