×

局部变量的生命周期

局部变量的生命周期(关于C中for循环内定义的变量的生命周期)

admin admin 发表于2024-01-15 01:39:54 浏览30 评论0

抢沙发发表评论

其实局部变量的生命周期的问题并不复杂,但是又很多的朋友都不太了解关于C中for循环内定义的变量的生命周期,因此呢,今天小编就来为大家分享局部变量的生命周期的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

本文目录

关于C中for循环内定义的变量的生命周期

在c语言中,变量通常要求局部变量在函数最开始声明,否则会被编译器报错,这种变量的声明周期只限于在函数体内。像你提出的这种,可以无视刚才的要求,在函数内部任意位置声明变量,他的声明周期就是for循环内部,每次进入都是新的变量,占用栈上空间。我有一个小窍门,方便记忆,{}内部的变量,声明周期只在当前{}内。比如:{ int a; int b;}可以这样声明变量,甚至不需要任何循环体,或者if,这些变量一旦离开当前{},就被销毁

C#,关于局部变量生存周期的问题

局部变量分为2种,一个是引用类型(类的实例、字符串)一个是值类型(intfloat等简单类型、结构体、枚举等)。引用类型的生命周期取决于是否所有活动线程的根对象可以遍历到它,如果有,就不会垃圾回收。值类型是复制过去的,和之前的没有关系了。如果你不用unsafe,不用非托管内存管理,你是不可能遇到访问一个已经被垃圾回收器回收的对象的情况的。

操作系统和编译器是怎么识别全局变量和局部

  • 操作系统,只管调度进程,线程编译器 根据编程语言的定义,确定变量的作用于,存储类型,生命周期!  

  • 定义在函数外部的变量,只有文件静态变量,和外部变量  

  • 外部变量,是实实在在的全局变量,不论作用域还是生命周期。  

  • 静态变量是局部作用域的,生命周期为,程序的生命周期的变量。  

  • 自动变量和函数参数,是局部作用域的生命周期为函数结束的局部变量。  

  • 寄存器变量,用register定义, 是局部变量;  

  • 函数内部的 静态变量 ,语句组内部的静态变量,局部作用域的,生命周期为,程序的生命周期的变量。  

  • 静态变量,编译器 ,可以通过 static 关键字知道。  

  • 自动变量,1)函数内部定义的非静态变量,非寄存器变量是自动变量。  

  • 2)函数参数,只能是自动变量,不过也可能定义在寄存器中。  

  • 这和调用约定有关,因此不可以用register定义。  

  • C语言没有全局变量这种数据类型。  

  • 只有4种存储类型,和变量的作用域与生命周期的概念。  

  • C++ 同样没有全局变量这种数据类型。  

  • 有另外的两种作用域  

  • 1) namespace 作用域。  

  • 2) 类(类型)作用域。  

  • C只有 全局,文件,函数以及函数内部的语句组,4种逐渐缩小的作用域。  

  • 其中内层,对外部作用域,具有完全的遮蔽作用。  

  • C++ 可以通过作用域限定符,区分不同作用域(类,名空间)的名字。  

  • 类作用域,可以通过访问权限,限制外部的访问权。  

  • 函数作用域(语句组作用域)是封闭的作用域,外部不可以使用函数内部定义的名字。  

  • 也不会和外部有命名冲突,只会遮蔽外部的名字。  

  • 类作用于,和名空间由于访问方式不同,命名冲突和遮蔽有些特殊。  

  • 函数和全局域,基本不会和类作用域有命名冲突,除非类方法内部。  

  • 命名空间,可以避免命名冲突。  

  • 类继承体系中,则有遮蔽现象。  

  • 还有访问权限问题。  

  • 实际上,全局变量,有两个概念可以判定  

  • 1)作用域(空间)   ===》由定义和声明位置,和定义和声明使用的关键字决定。  

  • 2)生命周期(时间) ===》外部和静态变量,的生命周期是全局的,从初始化到程序结束。  

  • 函数参数,和函数局部非静态变量,是局部变量  

  • 函数参数的传递,是跨函数的(实参,变成形参);  

  • 函数内部定义的,局部变量,只有定义处可见,作用域是函数甚至语句组局部,  

  • 其中静态变量,生命周期是全局的,非静态是函数甚至语句组的。  

  • 全局变量,不是C,C++的概念。  

  • 而是,使用编程语言的程序员的概念。  

  • 所以,全局变量 和C,C++的存储类型,作用域,生命周期等,不是一一对应的概念。  

  • 所以,可以有不同的理解。  

  • 所以这个概念是很模糊的,不清晰的。  

  • 比如局部静态变量,类的静态变量,是否全局变量,就不是可以清晰的说明的。 

C语言,全局变量,静态变量问题

全局变量 一般指在程序入口地址之前定义的数据(C语言源程序里面是在main函数之前定义,Windows程序是在WinMain函数之前定义的数据),全局变量一般不需要加任何关键字声明。直接在main函数之前定义int a;就可以了。要注意全局变量是在编译时分配存储单元的,所以如果你不对它初始化的话编译器会自动把它初始化为0,全局变量的作用域为整个程序,所以一个程序里面所有的子程序(函数)都能使用它。局部变量 因为全局变量可以被一个程序的所有函数使用,所以为了防止程序里面一个函数专用的数据被其他函数有意或无意的修改,所以引入了局部变量,局部变量可以用auto关键字申明,但是一般都省略auto关键字,局部变量是在函数里面定义的,比如在主函数里面定义int a=0;在fun函数里面定义int b=0;局部变量是在程序执行的时候临时分配存储单元的,它存储在堆栈段中,每个函数开始执行前都会先算出这个函数里面有多少个局部变量,占多少个存储空间,然后增加堆栈段空间以容纳这些数据,因为是临时分配的存储空间,所以所有的局部变量都是未初始化的,它里面的数据是其他函数用过的垃圾数据,你必须要给局部变量赋初值。在函数结束后会释放堆栈段空间,也就是局部变量只在它所在的函数的生命周期内有效。当一个函数执行结束后这个函数内的全部局部变量就全部不能用了。静态变量 因为局部变量的生命周期只在改局部变量所在的函数生命周期内有效,但是在很多程序内一个函数内的局部变量往往要保留,以便改函数下次调用时使用,所以就有了静态变量这个概念。静态变量与全局变量差不多,也是在编译时分配内存空间,并且自动初始化为0,静态变量的生命周期也是整个程序。但是与全局变量不同的是静态变量只有它所在的函数能够使用它,程序里面其他的函数是不能够访问它的。静态变量必须用static关键字申明。比如 static int a;

static和非static修饰的变量哪个生命周期长

被static修饰的变量生命周期更长,因为静态变量的生命周期取决于类的生命周期。它在类加载的时候被分配空间。

C语言:全局变量和局部动态变量,编译后逻辑地址就确定了吗

1、逻辑地址是确定了,但是物理地址是运行时候决定。2、在C语言里面,局部变量,全局变量都是存贮在栈(stack)里面的,而所有用malloc和new这种操作符动态分配的空间则都是存贮在堆(dump)里面的,举个简单的例子:int *ptr;ptr =(int*)malloc(100*sizeof(int));这两句中,ptr这个指针变量是存贮在栈里面,但是他所指向的内容则是在堆里面。明白了吗

文章分享结束,局部变量的生命周期和关于C中for循环内定义的变量的生命周期的答案你都知道了吗?欢迎再次光临本站哦!