C语言:
全局变量、本地变量
static: 持久存储(在哪里)
访问受局限(谁能看到你)
static本地变量就是全局变量
全局变量static: 只在这个.c文件里有效
本地变量static: 这个本地变量具有持久存储, 无论是否离开,本地变量都是保存着这个值的.(其实static本地变量就是全局变量)
函数static: 这个函数只能在.c文件里被访问,.c以外是无法访问的.
说明:(1). File1: global是一个全局变量,
在File2: 可以直接用extern来使用g_global
(2). File1: static int s_local, 表明s_local只能在File1文件
中使用, 就算在File2中使用static, 也只能骗过编译器,
但骗不过linker.
为何骗不过linker: s_local只能在File1中使用, File2中
extern int s_local要使用File1中的s_local, 两者相矛
盾,所以链接失败.
(3). static void hidden() 只能在File1文件中使用, 不能在File2文件中使用.
C++语言
static本地变量就是全局变量, 只能在此文件中使用.
成员变量 成员函数
static global variables: static全局变量(过时)
static local variables: static本地变量(持久存储)
static member variables: static成员变量(在所有对象之间共享)
static member function: staitc成员函数(函数共享,只能访问 静态的变量或函数 )
if(static是类)
class X
{
X(int,int);
~X();
};
void f()
{
static X my_X(10,20);//存储是全局,第一次进函数初始化.
//vptr
......
}
//关心2件事:(1).在哪里---全部数据区,链接的时候分配好了 (2).什么时候被构造出来
全局变量的构造,程序一运行的时候,main函数之前, 被构造.
void f(int x)
{
if(x>10)
{
static X my_X(x, x*21);//只在f()函数范围内,x>10条件下才会被调用 构造
......
}
}
#include "X.h"
X global_x(12,34);
X global_x2(8,16);
// 全局变量, 存储全局数据区,何时被构造?
// 全局变量的构造,程序一运行的时候,main函数之前, 被构造.