浅析变量的作用域和生存周期的差别

作用域:在一定的空间范围内可以使用。

生存周期:在一定的时间范围内存在。

example:

int f(int x){

static int k=0;

x+=k++;

return x;

}

求f(f(2));

这个结果是2。当中上例中k是一个静态局部变量。它的作用域就是本函数体内部。而它的生存周期确实一直有效,也就是说该变量一旦声明了之后。在内存开辟了一个单元用来存放它,仅仅有在该函数内部才干使用,在外部是不能使用的。可是它是一直存在的,它原先的值还是保存在那儿的。所以f(2)得到k=1,x=2;f(f(2))得到k=2,x=3。

时间: 2024-10-19 08:48:16

浅析变量的作用域和生存周期的差别的相关文章

浅析变量的作用域和生存周期的区别

作用域:在一定的空间范围内能够使用. 生存周期:在一定的时间范围内存在. example: int f(int x){ static int k=0; x+=k++; return x; } 求f(f(2)); 这个结果是2,其中上例中k是一个静态局部变量,它的作用域就是本函数体内部,而它的生存周期确实一直有效,也就是说该变量一旦声明了之后,在内存开辟了一个单元用来存放它,只有在该函数内部才能使用,在外部是不能使用的,但是它是一直存在的,它原先的值还是保存在那儿的,所以f(2)得到k=1,x=2

变量的作用域和生存周期

局部变量的作用域一般认为在函数体内有效,其内存分配管理和销毁由编译器来实现.当函数执行完成返回时,局部变量将全部销毁,则其生命周期也随之结束. 全局变量的生命周期等于程序执行时间,程序开始执行时,全局变量将被初始化. 举个例子: int tmp; int main() {     for(int i = 0;i< 100;++i) {       ...;        ...;        } } 可知i就是for循环内的一个局部变量,如果在for循环的花括弧外访问i,则会提示如下错误: e

Java知多少(20)变量的作用域

在Java中,变量的作用域分为四个级别:类级.对象实例级.方法级.块级. 类级变量又称全局级变量或静态变量,需要使用static关键字修饰,你可以与 C/C++ 中的 static 变量对比学习.类级变量在类定义后就已经存在,占用内存空间,可以通过类名来访问,不需要实例化. 对象实例级变量就是成员变量,实例化后才会分配内存空间,才能访问. 方法级变量就是在方法内部定义的变量,就是局部变量. 块级变量就是定义在一个块内部的变量,变量的生存周期就是这个块,出了这个块就消失了,比如 if.for 语句

javascript中的变量、作用域和内存问题

[变量][1]定义:可变的量,相当于给一个不定的数据起了一个外号.变量是存储信息的容器.[2]特性:js中的变量是松散类型的,可以保存任何类型的数据.它只是在特定时间用于保存特定值的一个名字而已.由于不存在定义某个变量必须要保存何种数据类型值的规则,变量的值及其数据类型可以在脚本的生命周期内改变.[3]变量声明:变量可以在声明时赋值,但不能有其他操作,如+=.-=等 var a = 2;//是正确的 var a += 2;//是错误的 var a = 2++;//是错误的,++只能用于变量,不能

JS基础知识回顾:变量、作用域和内存问题

ECMAScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值. 基本类型值指的是简单的数据段,而引用类型值指的是那些可能由多个值构成的对象. 引用类型的值是保存在内存中的对象,与其他语言不同,JavaScript不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间. 在操作对象时,实际上是在操作对象的引用而不是实际的对象. 在很多语言中,字符串以对象的形式来表示,因此被认为是引用类型的,ECMAScript放弃了这一传统. 定义基本类型值和引用类型值的方式是类似的:创建

6.Java变量的作用域

在Java中,变量的作用域分为四个级别:类级.对象实例级.方法级.块级. 类级变量又称全局级变量或静态变量,需要使用static关键字修饰,你可以与 C/C++ 中的 static 变量对比学习.类级变量在类定义后就已经存在,占用内存空间,可以通过类名来访问,不需要实例化. 对象实例级变量就是成员变量,实例化后才会分配内存空间,才能访问. 方法级变量就是在方法内部定义的变量,就是局部变量. 块级变量就是定义在一个块内部的变量,变量的生存周期就是这个块,出了这个块就消失了,比如 if.for 语句

C#中变量的作用域

变量的作用域 可以在类.接口.方法.语句块.结构体中定义变量. 与Java类似,C#中没有C++中的所谓全局变量的概念. 虽然很多书上会将在类中定义的static变量或const变量说明为全局变量,但是这种类的成员变量(或者叫类的属性)和C++中的全局变量有很大的差别.C++中的全部变量是直接定义在所有的函数和类之外的,但C#和Java中不能定义这种变量. 比较有意思的一点: 对于string类型以及类类型等的变量,如果是在循环语句外声明,但没有初始化,而是在循环语句中进行初始化,则在循环语句外

c++变量的作用域、生存期和可见性

局部变量 范围:在一个函数内部定义的变量,作用范围只限于本函数体内. 生存期:程序执行到本函数才会给局部变量分配内存单元,函数执行完毕局部变量所占的存储单元就被释放 全局变量 在函数体外部定义的变量是全局变量,可以被本文件所有其他函数访问使用. 作用域:所有文件.在一个cpp定义的全局变量在另一个cpp中使用,应该在使用它的函数体内部或外部进行extern说明 生存期:全局变量在程序的全部执行过程中占用固定的内存单元,生存周期是整个程序运行期间. 实验代码 /* * 变量的作用域.生存期和可见性

C/C++——C++变量的作用域与生命周期,C语言中变量的作用域和生命周期

全局变量 作用域:全局作用域(全局变量只需在一个源文件中定义,就可以作用于所有的源文件.) 生命周期:程序运行期一直存在 引用方法:其他文件中要使用必须用extern 关键字声明要引用的全局变量. 内存分布:全局数据区 注意:如果在两个文件中都定义了相同名字的全局变量,连接出错:变量重定义 全局静态变量 作用域:文件作用域(只在被定义的文件中可见.) 生命周期:程序运行期一直存在 内存分布:全局数据区 定义方法:static关键字,const 关键字 注意:只要文件不互相包含,在两个不同的文件中