-
2017-09-26 10:54:37
关于局部变量、局部静态变量的定义
局部变量:形参和函数体内部定义的变量。
局部静态变量:将局部变量定义为static类型。
三者区别
1.形参是一种自动对象,是由传递函数的实参进行初始化,作用域仅仅是在所在函数体内有用,函数终止,则形参也被销毁。
2.局部变量的生命周期由其定义方式决定,定义在函数体外的变量作用于整个程序的执行过程,定义在函数体内的作用于此函数执行的过程中。
3.静态局部变量在第一次被初始化之后直到程序结束才被销毁。
更多相关内容 -
C++形参,局部变量,静态局部变量区别
2020-02-05 20:07:45一.形参是一种自动对象,函数...局部静态变量比较特殊,它的生命周期贯穿函数调用及之后的时间,局部静态变量对应的对象成为局部静态对象,他的生命周期从定义语句开始,知道程序结束 四.Example #include<iostr...一.形参是一种自动对象,函数开始时为形参申请内存空间,调用函数时提供的实参初始化形参对应的自动对象
二.普通变量对应的自动自动对象,定义变量的语句出创建自动对象,所在块结束,该变量也就结束
三.局部静态变量比较特殊,它的生命周期贯穿函数调用及之后的时间,局部静态变量对应的对象成为局部静态对象,他的生命周期从定义语句开始,知道程序结束
四.Example
#include<iostream> using namespace std; double myPlus(double val_first,double val_second){ double result = val_frist_value_second; static unsigned count= 0; ++count; count<<"该函数已经累计执行了"<<count<<"次"<<endl; return result } int main(){ double num_1,num_2; count << "请输入两个浮点数:"; while(cin>>num_1>>num_2){ cout<<num_1<<"与"<<"的求值结果"<<myPlus(num_1,num_2)<<endl; } return 0; } }
-
形参、局部变量以及局部静态变量
2022-04-20 10:04:35函数体内的局部变量又分为普通局部变量和静态局部变量,对于形参和普通局部变量来说,当函数的控制路径经过变量定义语句时创建该对象,当到达定义所在的块末尾时销毁它。我们把只存在于块执行期间的对象称为自动对象...形参和定义在函数体内部的变量统称为局部变量,它们对函数而言是局部的,仅在函数的作用域内可见。函数体内的局部变量又分为普通局部变量和静态局部变量,对于形参和普通局部变量来说,当函数的控制路径经过变量定义语句时创建该对象,当到达定义所在的块末尾时销毁它。我们把只存在于块执行期间的对象称为自动对象。这几个概念的区别是:
- 形参是一种自动对象,函数开始时为形参申请内存空间,我们用调用函数时提供的实参初始化形参对应的自动对象。
- 普通变量对应的自动对象也容易理解,我们在定义该变量的语句处创建自动对象,如果定义语句提供了初始值,则用该值初始化;否则,执行默认初始化。当该变量所在的块结束后,变量失效。
- 局部静态变量比较特殊,它的生命周期贯穿函数调用及之后的时间。局部静态变量对应的对象称为局部静态对象,它的生命周期从定义语句处开始,直到程序结束才终止。
代码助解:
#include<iostream> using namespace std; double myAdd(double val1,double val2){ double resul = val1+val2; static unsigned iCnt = 0;//静态局部变量(贯穿程序始终) ++iCnt; cout<<"该函数共执行了"<<iCnt<<"次"<<endl; return resul; } int main(){ double num1,num2; //普通局部变量 cout<<"请输入两个数:"<<endl; while(cin>>num1>>num2){ cout<<"求和结果为:"<<myAdd(num1,num2)<<endl; } return 0; }
输出结果:
请输入两个数: 2.4 3.4 该函数共执行了1次 求和结果为:5.8 33 33 该函数共执行了2次 求和结果为:66 43 34 该函数共执行了3次 求和结果为:77 ^Z 请按任意键继续. . .
-
全局变量与局部变量,静态变量与动态变量,内部函数与外部函数的区别
2020-06-16 10:15:28(2)形参变量属于被调函数的局部变量,实参变量属于主调函数的局部变量。 (3)允许在不同的函数中使用相同的变量名,但它们代表不同的对象,占用不同的存储单元,互不干扰。 (4)在复合语句中也可以定义变量,但...一、变量按作用域范围分类
局部变量:在函数内定义的变量,作用域限于函数内。
说明:(1)主函数定义的变量不能再其他函数中使用,主函数也不能使用其他函数定义的变量。
(2)形参变量属于被调函数的局部变量,实参变量属于主调函数的局部变量。
(3)允许在不同的函数中使用相同的变量名,但它们代表不同的对象,占用不同的存储单元,互不干扰。
(4)在复合语句中也可以定义变量,但其作用域只能在复合语句内。
全局变量:在函数外定义的变量,它的作用域是从变量定义开始,到程序文件的末尾。如果在定义点前的函数要使用该外部变量,要使用关键字extern。
说明:(1)全局变量由于一个文件中所有函数都能引用全局变量的值,因为在一个函数中能够改变了变量的值会对其他函数产生影响,带来不安全性,并且一直占用存储空间,所以不建议用
(2)全局变量和局部变量同名时,在函数中全局变量隐藏,局部变量起作用。
实例:#include <stdio.h> void gx(); void gy(); int main() { extern int x,y; ///用extern将外部变量的作用域扩展到前面 printf("1:x=%d,y=%d\n",x,y); y=246; gx(); gy(); return 0; } void gx() { extern int x,y; //用extern将外部变量的作用域扩展到前面 x=135; printf("2:x=%d,y=%d\n",x,y); } int x,y; //定义外部变量 void gy() { printf("3:x=%d,y=%d\n",x,y);
二、变量按生存周期分类
动态变量:动态变量在函数调用时分配存储空间,函数调用结束后释放存储空间。它可以是函数的形参,局部变量,函数调用时的现场保护和返回地址。
静态变量:在运行期间由系统分配固定的存储空间,在静态存储区的变量。它可以是全局变量,也可以是局部变量。几个关键字:
- auto:动态变量,一般可省略。
- static:静态变量,分为静态局部和静态全局。
(1)静态局部变量:它和局部变量的区别在于函数退出时,变量始终存在,但不能被其他函数使用,当再次进入该函数时,能保存上次的结果继续使用。如果不赋初值,则自动赋初值0或空字符。
(2)静态全局变量:只在定义它的源文件中可见,在其他源文件中不可见。它和全局变量的区别是,全局变量可以使用关键字extern被其他源文件使用,而静态全局变量不能。 - register:寄存器变量,不存入内存,直接保存在CPU内的寄存器中,提高执行速度。一般把使用最频繁的变量定义为register变量,如循环变量。它不能是静态变量,只能是动态变量。
例如:
{ register int i; for(i=0;i<n;i++) { ... } ... }
三、按函数能否被其他源文件使用,分为内部函数和外部函数
内部函数: 只能被本程序文件调用,和其他文件中的同名函数互不干扰。使用关键字static+函数。例如:
static int max(int a,int b) { ... }
外部函数: 可以被其他文件调用,使用关键字extern+函数,如果省略extern,则默认为外部函数。例如:
extern int fun(int x,int y) { ... }
实例:
#include <stdio.h> void func();//函数声明,主要是因为被调用的函数定义写在了main函数后面了 int n = 1; //全局变量 int main(void) { static int a; // 静态局部变量,但静态局部变量只在定义它的函数中可见,并且只初始化一次 int b = -10; // 局部变量 printf("main: a=%d, b=%d, n=%d\n",a,b,n); b += 4; func(); printf("main: a=%d, b=%d, n=%d\n",a,b,n); n += 10; func(); printf("main: a=%d, b=%d, n=%d\n",a,b,n); } void func() { static int a = 2; // 静态局部变量 int b = 5; // 局部变量 a += 2; n += 12; b += 5; printf("func: a=%d, b=%d, n=%d\n",a,b,n); }
运行结果:
结果分析:首先明确main函数和func函数里面都有静态局部变量a和局部变量b,由于它们的固有性质,它们都只在定义它的函数里有效,所以它们互不干扰,所以只要在本函数里分析即可,而全局变量n,在main和func函数里都有效,所以分析它的值应该考虑n在这两个函数里的变化
-
C++primer——形参、局部变量和静态局部变量的差别
2014-04-22 17:13:56形参、局部变量和静态局部变量的差别 从本质上说,三者均属于局部作用域中的变量,其中局部变量又可以分为普通(非静态)局部变量和静态局部变量。它们的差别: 作用域:形参的作用域为整个函数体;而普通(非... -
解释形参、局部变量和静态局部变量的差别
2013-04-02 20:11:22(1) 形参的作用域为整个函数体,而普通(非静态)局部变量和静态局部变量的作用域为:从定义处到包含该变量定义的块的结束处。 (2) 形参由调用函数时所传递的实参初始化;而普通(非静态)局部变量和... -
变量:全局变量,局部变量,静态变量,动态变量
2020-06-29 09:25:09全局变量,局部变量,静态变量,动态变量。 -
java中成员变量,局部变量,静态变量的辨析
2021-02-12 22:15:30for=pc1.java中成员变量,局部变量,静态变量的辨析Java中的变量大致分为 成员变量 和 局部变量 两大类。成员变量:在类体里面定义的变量称为成员变量;如果该成员变量有 static 关键字修饰,则该成员变量称为静态... -
c语言之形参和实参,全局变量和局部变量
2020-05-22 13:23:40c语言中形参与实参: 形参 form parameter ...//在函数中,形参就可以当作是一个局部变量。 if ( a>b ) return a; else return b; } 函数调用 int main() { int a=3,b=5 ; printf( "max=%d\n" , max(a,b) ) -
Python 形参和实参,局部变量和全局变量的含义理解及使用
2020-09-15 17:20:501、形参和实参 1.1 形参的含义及使用 1.2 实参的含义及使用 2、局部变量和全局变量 2.1 变量作用域的概念 2.2 局部变量 2.3 全局变量 2.4 修改全局变量值 -
C语言--静态局部变量
2020-10-05 09:14:29静态局部变量也是定义在函数内部的,静态局部变量定义时前面要加static关键字来标识,静态局部变量所在的函数在多调用多次时,只有第一次才经历变量定义和初始化,以后多次在调用时不再定义和初始化,而是维持之前上... -
C语言函数的形参和实参
2021-05-20 14:41:20原标题:C语言函数的形参和实参上一个例程中在进行函数调用的时候,不需要任何参数传递,所以函数定义和调用时括号内都是空的,但是更多的时候我们需要在主调函数和被调用函数之间传递参数。在调用一个有参数的函数... -
C++ Primer学习笔记(8)——形参、局部变量、静态局部变量
2015-07-04 15:04:03函数中常用到形参、局部变量、静态局部变量(static),那三者的区别是什么? -
Java中成员变量、局部变量、静态变量的区别,静态变量详解
2020-08-28 23:30:31目录1 成员变量、局部变量和静态变量2 静态变量的特点及注意事项1 特点2 注意事项3 什么情况下使用静态变量3 总结 1 成员变量、局部变量和静态变量 成员变量:在类中且在方法外定义的变量称为成员变量; 局部变量:... -
Java中局部变量、静态变量、静态方法的有效范围与调用
2018-06-06 18:09:101.局部变量定义:在成员方法中定义的...(方法中的形参也可以作为局部变量)例:public void method1() { //n,i均为局部变量 int n; for(int i=0;i<5;i++) { System.out.println("*"); } ... -
静态变量、动态变量、内部变量(局部变量)、外部变量(全局变量)
2019-11-26 17:53:17区分静态变量、动态变量、内部变量(局部变量)、外部变量(全局变量)静态变量、动态变量、内部变量(局部变量)、外部变量(全局变量)变量的分类来看 静态变量、动态变量、内部变量(局部变量)、外部变量(全局... -
C语言中全局变量、局部变量、静态全局变量、静态局部变量的区别
2014-03-03 11:42:111.C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种: 全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域。 ...静态局部变量具有局部作用域 -
【C++】局部变量、全局变量、静态变量、动态对象区别
2020-04-23 18:30:34在一个函数内部定义的变量(包括函数形参)是局部变量。 全局变量 在函数外定义的变量是局部变量。 静态变量 静态全局变量 在全局变量前加static修饰。 静态局部变量 在局部变量前加static修饰。 动态对象 ... -
形参与局部变量名相同时js的处理
2018-09-16 19:38:39当形参与局部变量相同且局部变量有赋值时,局部变量的赋值会覆盖形参的值。 function fn ( a ) { console . log ( a ) ; // 1 console . log ( arguments [ 0 ] ) ; // 1 var a = 2 ; ... -
局部变量、全局变量、静态存储、动态存储关系、堆和栈
2018-11-04 22:38:35一:局部变量、全局变量、静态存储、动态存储关系 变量的分类: ①从空间上分配:从变量的作用域可以分成:局部变量和全局变量。 ②从变量的存在时间(生存周期)可以分成:静态存储和动态存储。 局部变量... -
JVM基础(十二):Java中局部变量、实例变量和静态变量在方法区、栈内存、堆内存中的分配
2021-03-14 22:21:42目录 1、java中的变量与数据类型 2、思考 3、例子: 3.1、分析: ...1、java中的变量与数据类型 ...变量是一个容器,用来装什么的呢?装内存地址,这个内存地址对应的是内存中某个数据。...局部:在. -
类成员变量,局部变量(形参),静态变量
2017-09-14 11:53:281、类体由2部分构成: 类成员变量和类成员方法 类成员变量(也可以叫全局变量) 在方法体外部声明的变量 作用域是整个类 局部变量 在方法体内部声明的变量 作用域是在本 -
C语言:局部变量与全局变量
2021-01-14 16:42:581.形参与实参C语言函数的参数会出现在两个地方,分别是函数定义处和函数调用处,这两个地方的参数是有区别的。1.1形参(形式参数)在函数定义中出现的参数可以看做是一个占位符,它没有数据,只能等到函数被调用时接收... -
学习C++:全局变量,局部变量,静态变量
2020-03-30 14:53:521、全局变量: 定义在函数内部的变量叫局部变量(函数的形参也是局部变量; 2、局部变量:定义在所有函数的外面的变量叫全局变量; 3、静态变量:全局变量都是静态变量,局部变量在定义时加了关键字“static”,则... -
成员变量、类变量(静态变量)、局部变量的区别
2017-08-03 20:31:04如果局部变量的名字和成员变量的名字相同, 要想在该方法中使用成员变量,必须使用关键字this [java] view plain copy class People { String name = "类体重定义的name"; -
变量的属性(全局变量、局部变量、动态变量、静态变量等)
2018-04-15 17:18:25原博主:https://blog.csdn.net/21aspnet/article/details/2560072变量的属性 1、变量的分类l 根据作用域:可分为全局变量和局部变量。l 根据生存周期:可分为静态存储方式和动态存储方式,具体地又分为自动的... -
【C++】局部变量、全局变量、静态变量与动态对象的性质
2018-02-07 13:52:57在一个函数内部定义的变量(包括函数形参)是局部变量。 全局变量 在函数外定义的变量是局部变量。 静态变量 静态全局变量 在全局变量... -
变量(全局变量、局部变量和静态变量)的作用域
2019-11-24 17:17:381.局部变量(动态储存) 1、仅能在它所定义的语句块内有效 例如: 第一个x,为零的作用域为定义它的语句块作用域(红色格格),里面的为橙色格格。 2、作用域较小的局部变量隐藏作用域较大的局部变量 例如:上图里... -
局部变量、全局变量、静态变量的含义及存储位置
2017-09-19 21:35:00局部变量保存在动态数据区的栈中,只有在所在函数被调用时才动态地为变量分配存储单元。 1).主函数main中定义的变量也只在主函数中有效. 2).不同函数中可以使用名字相同的变量,它们代表不同的对象,互不干扰. -
静态变量和成员变量、成员变量和局部变量的区别
2019-06-18 16:31:55一、 静态变量和成员变量的区别: (1):所属不同: 静态变量:属于类,也称为类变量。 成员变量:属于对象,也称为对象变量或实例变量。 (2):在内存中的位置不同: 静态变量:存储于方法区的静态区。 成员...