第19讲 全变量及其作用域和生存期 函数的存储分类ppt教学课件
- 格式:ppt
- 大小:170.50 KB
- 文档页数:10
变量的作用域局部变量和全局变量在函数和复合语句内定义的变量,只在本函数或复合语句范围内有效(从定义点开始到函数或复合语句结束),他们称为内部变量或局部变量。
在函数之外定义的变量是外部变量,也称为全局变量(或全程变量)。
如果在一个函数中全局变量和局部变量同名,则在局部变量的作用范围内,外部变量被“屏蔽”,即他不起作用,此时局部变量是有效的。
全局变量的作用是增加函数间数据联系的渠道。
虽然全局变量有以上优点,但建议不必要时不要使用全局变量,因为全局变量在程序的全部执行过程中都占用存储单元,而不是仅在需要时才开辟单元。
在程序设计时,对模块的划分要求:内聚性强,与其他模块的耦合性弱,这样便于程序的移植,可读性强。
变量的生存期变量的存储方式分为两种:静态存储方式和动态存储方式。
静态存储方式是指在程序与性能期间由系统在静态存储区分配存储空间的方式,在程序运行器件不释放;而动态存储方式则是在函数调用期间根据需要在动态存储区分配存储空间的方式。
这就是变量的存储区别。
Auto----声明自动变量函数中的形参和在函数中定义的变量都属于此类。
在调用这些函数时,系统给这些变量分配存储空间,函数调用结束时就自动释放这些存储空间。
因为这类局部变量称为自动变量(auto 变量)。
关键字auto作为存储类别的声明。
Auto可省略Static-----声明静态变量希望函数中的变量的局部变量的值在函数调用结束后不消失而继续保留原值,即其占用的存储单元不释放,在下一次该函数调用时,该变量已有值,就是上一次函数调用结束时的值。
这时就用关键字static指定该局部变量为“静态存储变量”。
对静态局部变量的说明静态局部变量属于静态存储类别,在静态存储区内分配存储单元,在程序整个运行期间都不释放。
而自动变量(即动态局部变量)属于动态存储类别,占胴体啊存储区空间而不占静态存储区空间,函数调用结束后即释放。
对静态局部变量是在编译时赋初值的,即只赋初值一次,在以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。
变量与函数课件变量与函数课件在计算机科学领域中,变量和函数是两个基本概念,它们在编程语言中起着重要的作用。
变量用于存储数据,而函数则用于执行特定的任务。
本文将探讨变量和函数的概念、用法以及它们在实际编程中的应用。
一、变量的概念与用法变量是计算机程序中存储数据的一种方式。
它们可以存储各种类型的数据,如整数、浮点数、字符串等。
在编程中,我们可以通过给变量赋值来存储数据,并在后续的代码中使用这些数据。
例如,在Python编程语言中,我们可以通过以下方式定义一个整数变量:num = 10在这个例子中,我们定义了一个名为"num"的变量,并将其赋值为10。
现在,我们可以在后续的代码中使用这个变量来进行计算或输出。
除了整数,变量还可以存储其他类型的数据。
例如,我们可以定义一个字符串变量:name = "John"在这个例子中,我们定义了一个名为"name"的变量,并将其赋值为"John"。
现在,我们可以在后续的代码中使用这个变量来进行字符串操作。
变量不仅可以存储数据,还可以进行一些基本的操作,比如加法、减法、乘法和除法。
例如,我们可以定义两个整数变量并进行加法操作:num1 = 5num2 = 3sum = num1 + num2在这个例子中,我们定义了两个整数变量"num1"和"num2",并将它们的和赋值给"sum"变量。
现在,"sum"变量的值为8,我们可以在后续的代码中使用它。
二、函数的概念与用法函数是一段可重用的代码块,用于执行特定的任务。
它们接受输入参数,并返回输出结果。
在编程中,函数可以帮助我们组织代码,并提高代码的重用性和可读性。
在许多编程语言中,函数的定义通常包括函数名、参数列表和函数体。
例如,在Python中,我们可以定义一个简单的函数来计算两个数的和:def add(num1, num2):sum = num1 + num2return sum在这个例子中,我们定义了一个名为"add"的函数,它接受两个参数"num1"和"num2"。
C语言入门教程:变量的作用域和生存期.txt你妈生你的时候是不是把人给扔了把胎盘养大?别把虾米不当海鲜。
别把虾米不当海鲜。
作用域和生存期C程序的标识符作用域有三种:局部、全局、文件。
标识符的作用域决定了程序中的哪些语句可以使用它,换句话说,就是标识符在程序其他部分的可见性。
通常,标识符的作用域都是通过它在程序中的位置隐式说明的。
1.局部作用域前面各个例子中的变量都是局部作用域,他们都是声明在函数内部,无法被其他函数的代码所访问。
函数的形式参数的作用域也是局部的,它们的作用范围仅限于函数内部所用的语句块。
void add(int);main(){int num=5;add(num);printf(%d\n,num); /*输出5*/}void add(int num){num++;printf(%d\n,num); /*输出6*/}上面例子里的两个num变量都是局部变量,只在本身函数里可见。
前面我们说了,在两个函数出现同名的变量不会互相干扰,就是这个道理。
所以上面的两个输出,在主函数里仍然是5,在add()函数里输出是6。
2.全局作用域对于具有全局作用域的变量,我们可以在程序的任何位置访问它们。
当一个变量是在所有函数的外部声明,也就是在程序的开头声明,那么这个变量就是全局变量。
void add(int);int num;main(){int n=5;add(n);printf(%d\n,num); /*输出6*/}void add(num) /*形式参数没有指定类型*/{num++;printf(%d\n,num); /*输出6*/}上面的main()和add()里面,并没有声明num,但是在最后输出的时候却要求输出num,这是由于在程序的开始声明了num是全局变量,也就是在所有函数里都可以使用这个变量。
这时候一个函数里改变了变量的值,其他函数里的值也会出现影响。
上面的例子输出都是6,因为在add()函数里改变了num的值,由于num是全局变量,就好象它们两个函数共用一个变量,所以在main()函数里的num也随之改变了。
变量的⽣存期和作⽤域变量的⽣存期和作⽤域是个很基础但⼜很重要的问题,所以我打算写⼏百字重温⼀下。
变量的⽣存期是指变量在什么时间段存在。
变量的作⽤域是指变量在哪些代码块中能够被访问。
⼀般来说变量⽣存期包含作⽤域。
即在变量起作⽤的代码段,这时变量已经分配了存储空间。
也就是说,变量可能已经分配存储空间,但它不能被访问。
在程序加载到内存中时,有些变量就已经分配存储空间,并且这个存储空间直到整个程序执⾏完毕,从内存中退出时才会被释放。
这些变量的⽣存周期就为整个程序的⽣存周期。
如全局变量和静态局部变量。
它们的差别是全部变量的作⽤域⼀般为定义处到它所在⽂件结束。
要在全局变量定义位置之前或其他源⽂件中引⽤该全局变量,需要⽤extern来扩展该全局变量的作⽤域。
程序中有的变量在程序加载到内存中时并不分配存储空间,⽽是到定义它的函数被调⽤执⾏时才会临时分配存储空间,并且⼀旦该函数执⾏完毕返回到被调⽤处,这些变量的存储空间会被回收。
如⾮静态局部或⾃动变量。
⼀个局部变量,如果没有⽤static修饰则⾃动为auto,即这种情况下⽣存期为函数调⽤到函数返回这个时间段。
对于⾮静态局部变量,⽣存期和作⽤域都为其所在定义的函数对于静态局部变量,它的⽣存期是整个程序⽣命周期,但作⽤域依旧为定义它的函数内部全局变量与静态局部变量如果未初始化,值为0⾮静态局部变量未初始化,值不定。
1. ⼀般情况下全局变量定义函数外,局部变量定义函数内;全局变量作⽤范围是全局,局部变量作⽤范围在函数内;2. 静态变量定义在函数外,则为静态全局变量,作⽤范围为当前⽂件;定义在函数内,则为局部静态变量,作⽤范围同局部变量;3. 如果在全局范围要经常⽤到某个值,则设置为静态变量,否则定义为普通全局变量即可;4. c、c++和java可以定义静态变量,go和python不能定义静态变量;。