变量生存周期和静态局部变量

 

只有当函数被调用时, 其形参和局部变量才被分配了内存, 一旦调用结束, 其空间将被回收.根据这种特性, 把局部变量称为自动变量.

定义形式  :   auto int x, y;

在定义时, auto一般省略.

静态变量赋初始值只有在函数第一次调用时起作用, 若没有赋初始值,系统自动赋0.

  1 #include<stdio.h>
  2 double fact_s(int i){
  3     static double f = 1;
  4     f = f * i;
  5     return f;
  6 }
  7 int main(void){
  8     int i;
  9     for(i = 1; i <= 10; i++){
 10         printf("%d!, %0.f\n", i, fact_s(i));
 11     }
 12     return 0;
 13 }
时间: 2024-08-01 16:55:22

变量生存周期和静态局部变量的相关文章

C/C++语言变量问题(全局变量、局部变量、静态全局变量、静态局部变量)

1.C/C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种: 全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域. 从作用域看: 1>全局变量具有全局作用域.全局变量只需在一个源文件中定义,就可以作用于所有的源文件.当然,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量. 2>静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的

【C语言】局部变量、全局变量,局部静态变量,全局静态变量,extern,static的区别

局部变量: 创建在栈区(向下生长),生命周期存在于当前作用域中.     创建时若未初始化,则为随机值. 全局变量: 创建在static区,生命周期一直存在. 创建时若未初始化,则为0. 静态局部变量: 切断了外部链接属性.创建在static区. 创建时若未初始化,则为0. 全局变量和静态变量的存储是放在一块的,初始化了的全局变量和静态变量在一块区域,  未初始化的全局变量和未初始化的静态变量在相邻的另一块区域. 全局静态变量: 切断了外部链接属性,创建在static区,生命周期一直存在. 创建

局部变量的存储类别--自动变量与静态局部变量

1.自动变量  auto 动态的分配存储空间,在函数调用结束后,就自动释放这些存储空间. 2.静态局部变量 static 即在函数调用结束后继续保留原值,占有的存储单元并不释放,在下一次调用该函数时,该变量已经有值. (若没有声明为static类别,则默认为auto类别) 具体区别,通过下面这段代码来理解: 1 #include<stdio.h> 2 3 int fun(int x) 4 { 5 int a=0; 6 static int b=3; 7 a++; 8 b++; 9 return

静态变量、全局变量和局部变量

1.全局变量的作用域是整个项目,它只需要在一个源文件中定义就可以作用于所有的源文件,其它不包括全局变量定义的文件需要用extern关键字再次声明这个全局变量. 2. 全局变量.静态全局变量.静态局部变量都是在静态存储区(全局数据区)中分配空间的,而局部变量是在栈上分配空间的. 3. 全局变量.静态变量的生命期和程序生命期是一样的,在程序结束之后操作系统会回收空间. 4. 全局变量和静态变量都是保存在静态存储区中,生命期和程序一样,但是不同的是全局变量的作用域是整个项目,而静态全局变量是当前程序文

四种变量的区别(局部变量,全局变量,静态局部变量,静态全局变量)

区别: 1. 局部变量: (1)在函数体内部或者复合语句中定义的变量称为局部变量. (2)作用域为当前的函数体. (3)在栈区(动态存储区)分配. (4)函数调用时开始分配,调用结束时释放. 2. 全局变量: (1)在函数体之外定义的变量称为全局变量. (2)当前文件所有函数都可以调用该变量,其他文件调用需要使用extern关键字. (3)在静态存储区分配. (4)程序运行期间不释放. 3. 静态局部变量: (1)在函数体内部定义并加上static关键字修饰的变量. (2)作用域为当前函数体,函

随笔⑨ java中的变量 --- 类变量(静态变量),final变量,成员变量,局部变量

java中的变量 --- 类变量(静态变量),final变量,成员变量,局部变量 ① 类变量(也叫静态变量)是类中独立于方法之外的变量,用static 修饰,静态变量随着类的加载而加载. ② final变量:用final关键字修饰,不能被修改.与static一起用可表示常量. ③ 成员变量(也叫"实例变量"."域"):也是类中独立于方法之外的变量,不过没有static修饰.可以不进行初始化,Java会自动进行初始化,如果是引用类型默认初始化为null,如果是基本类型

全局变量、局部变量、静态全局变量、静态局部变量在内存里的区别

一.程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分: 1.栈区(stack)- 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈. 2.堆区(heap) - 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 .注意它与数据结构中的堆是两回事,分配方式倒是类似于链表. 3.全局区(静态区)(static)- 全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变

java之static变量与全局、局部变量的区别

static变量与全局.局部变量的区别 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量.全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式.这两者在存储方式上并无不同.这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的.而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它.由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函

转:C语言中的static变量和C++静态数据成员(static member)

转自:C语言中的static变量和C++静态数据成员(static member) C语言中static的变量:1).static局部变量        a.静态局部变量在函数内定义,生存期为整个程序运行期间,但作用域与自动变量相同,只能在定义该变量的函数内使用.退出该函数后, 尽管该变量还继续存在,但不能使用它.        b.对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值.而对自动变量不赋初值,则其值是不定的.2).static全局变量        全局变量本身就是静