1.static的两种基本含义
- 在固定的地址上(静态数据区)进行存储分配,而不是每次函数调用时正在堆栈上产生;
- 对一个特定的编译单位来说是局部的,即static控制名字的可见性
2. 函数内部的静态变量
-
通常,在函数体内定义一个局部变量时,编译器每次调用函数时,堆栈的指针向下移动,为这些局部变量分配内存。
-
若在函数内部定义一个static对象,这个对象将存储在程序的静态数据区中。这个对象只在函数首次调用时初始化一次,以后它将在两次函数调用之间保持它的值。
char oneChar(const char* charArray = 0) { static const char* s; if(charArray) { s = charArray; return *s; } else require(s, "un-initialized s"); if (*s == '\0') { return 0; } return *s++; } char* a = "abcdefghijk"; int main(){ oneChar(a); char c; //注意到while循环的oneChar并无带参数 while ((c = oneChar() != 0)) { cout << c << endl; } }