#include
void func()
{
static int x = 0; // 在对func的三次调用中,x只进行一次初始化
printf("%d\n", x); // 输出x的值
x = x + 1;
}
int main(int argc, char * const argv[])
{
func(); // 输出0
func(); // 输出1
func(); // 输出2
return 0;
}
对于静态局部变量来说,在函数内以static声明的变量虽然与自动局部变量的作用域相同(即作用域都只限于函数内),但存储空间是以静态分配而非默认的自动分配方式获取的,因而存储空间所在区域不同(一般来说,静态分配时存储空间于编译时在程序数据段分配,一次分配全程有效;而自动分配时存储空间则是于调用栈上分配,只在调用时分配与释放),且两次调用间变量值始终保持一致;必须注意,静态局部变量只能初始化一次,这是由编译器来保证实现。
然而:“变量赋值”和“变量初始化”不是一回事。
“变量赋值”发生在运行期,其写法遵循赋值语法规定。
“变量初始化”发生在编译期或运行期,其写法遵循初始化列表语法规定。
例如:
如
1 static int a=1;
2 static int a;
a=1;
当函数内部采用第二种方式时,每次调用函数a=1都会再运行一次(赋值一次)。
满意请采纳,不懂请追问。