局部变量 全局变量和存储属性

一.概述

1.局部变量

  在函数内部定义,或者在结构体内定义。它的作用域仅仅限于本函数或本结构,生存期为开始创建(程序执行到定义的语句)到本函数结束。换句话说,在另一个函数中不能用本函数的变量,即使名相同也是如此。

2.全局变量

  在函数外部定义。全局变量在编译时已经生成,到整个程序结束时才释放。在一个函数内对全局变量进行操作后的值是可以保留下来的,即可以在另一个函数中使用这个新的值。这可以用来实现多个参数的回传(return 只能返回一个值)。但应注意,全局变量不能过多使用,否则会降低程序的清晰性。

3变量的存储方式(auto、static、register、extern)

  存储空间分为:程序区、静态存储区和动态存储区。

  二.局部变量总结

  局部变量的静态和动态(加static与否)是规定其存储区域的,决定了其生存期。

  1).动态局部变量

    局部变量的存储方式是动态(auto)的,即根据需要动态的分配存储空间,也动态的释放。如果不加声明,默认为auto 型。

  2).静态局部变量

    我们已经说过,局部变量是动态的存储方式,这就意味着当它执行完就会被释放,但有时候想要保留这个值,这就有了静态局部变量。

    如:static int a;这就定义了一个静态局部变量。他属于静态存储类别,故整个程序运行期间都不会释放,它是在编译时就生成并且赋初值的,在以后调用时不会再赋值,而是使用这个新的值。

  3)register变量

    寄存器是集成在cpu中的,因而register变量比存在内存中的变量读取速度更快。但容量太小,不建议使用。

  三.全局变量总结

  全局变量是一定存在静态区域的,加static与否决定的是其作用域,加static限制了该变量只能作用于本文件。

  1)extern使用

    有时我们定义了全局变量,但在定义处的上方我们仍然想要使用这个变量,怎么办呢?用extern int a;在需要处加以声明。

    extern 还可以用于多文件中同一全局变量的使用。在另一文件中,用extern可以把本文件的变量作用域延展到另一文件。

  2)static使用

    想要该全局变量仅仅限于本文件使用,用static。

   综上所述,1。static等标记称之为存储属性,默认为auto。int等称之为操作属性。

        2。生存期和作用域可以用下表表示:

            3。c语言中static的语义

        1).局部
          a.静态局部变量在函数内定义,生存期为整个源程序,但作用域与自动变量相同,只能在定义该变量的函数内使用。退出该函数后, 尽管该变量还继续存          在,        但不能使用它。
          b.对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。
        2).全局
          全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。但是他们的作用域,非静态全局 变量的作用域是整个源程序(多个源文件可以共同使用); 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。

时间: 2024-10-07 14:06:17

局部变量 全局变量和存储属性的相关文章

C语言之局部变量&全局变量&变量存储方式

一.角度分析: 变量作用域 -------> 局部变量和全局变量 变量存在的生存期 ---------> 静态存储方式和动态存储方式 二.局部变量: 局部变量也称为内部变量.局部变量是在函数内作定义说明的.其作用域仅限于函数内,离开函数后再使用这种变量是非法的. 例子: 关于局部变量的作用域还要说明以下几点: 1)主函数也是一个函数,它与其他函数是平行关系.主函数中定义的变量也只能在主函数中使用,不能在其他函数中使用.同时,主函数中也不能使用其他函数中定义的变量. 2)形参变量是属于被调函数的

C_局部变量&全局变量

2018-5-9 ? Writen By Stephen.Yu 一.定义 1. 局部变量:在函数中定义的变量 2. 全局变量:在所有函数体之外定义 定义(Definition):声明并分配内存;未分配内存则只是声明(declaration) 二.局部变量&全局变量 1.某个函数中定义的变量不能被另一个函数使用 void time(int hour, int minute) { printf("%d:%d\n", hour, minute); } int main(void) {

Swift类与结构、存储属性、计算属性、函数与方法、附属脚本等

写了12个Person来复习,不过完成同样的代码需要敲键盘的次数相比OC确实少了很多,这很多应该归功于Swift中不写分号,以及少了OC中的中括号. 一.类与结构体 两者在Swift中差不了多少了 类与结构体有很多相同的地方: (第2,3点是其他语言中不存在的) 1)都可以定义属性/方法/下标(结构体也可以定义方法了) 2)都能初始化(通过构造方法) 3)都能使用扩展(extension)与协议(protocol) 4)类与结构体(枚举)中的全局属性/方法:在类中用class关键字,但在结构体中

Swift 2.0学习笔记(Day 31)——存储属性

原创文章,欢迎转载.转载请注明:关东升的博客 Swift中的属性分为存储属性和计算属性,存储属性就是Objective-C中的数据成员,计算属性不存储数据,但可以通过计算其他属性返回数据. 存储属性可以存储数据,分为常量属性(用关键字let定义)和变量属性(用关键字var定义). 存储属性概念: 我们在前面曾用到过属性,Employee类和Department结构体.它们的类图如下,Employee 的部门属性dept与Department之间进行了关联. 我们可以在定义存储属性时指定默认值,示

【iOS】Swift类与结构、存储属性、计算属性、函数与方法、附属脚本等

写了12个Person来复习,不过完成同样的代码需要敲键盘的次数相比OC确实少了很多,这很多应该归功于Swift中不写分号,以及少了OC中的中括号. 一.类与结构体 两者在Swift中差不了多少了 类与结构体有很多相同的地方: (第2,3点是其他语言中不存在的) 1)都可以定义属性/方法/下标(结构体也可以定义方法了) 2)都能初始化(通过构造方法) 3)都能使用扩展(extension)与协议(protocol) 类比结构体多的功能: 1)能继承 2)运行时能检查类对象的类型 3)析构释放资源

Swift 2.0学习笔记(Day 38)——构造函数与存储属性初始化

原创文章,欢迎转载.转载请注明:关东升的博客 构造函数的主要作用是初始化实例,其中包括:初始化存储属性和其它的初始化.在Rectangle类或结构体中,如果在构造函数中初始化存储属性width和height后,那么在定义他们时就不需要初始化了. Rectangle类代码如下: class Rectangle { var width: Double var height: Double init() { width = 0.0 height = 0.0 } } 如果存储属性在构造函数中没有初始化,

Swift研究之编程高级教程(二)属性,存储属性详解

 属性 属性是依赖于某个特定的类.结构体或者枚举类型的值.Swift有两种属性:存储类型和计算类型.其中存储类型可以作为实例的一部分存放变量或者常量的值,而计算类型的属性值是通过运算的来的.计算类型的属性可以在类.结构体和枚举类型中出现,但存储类型只可能出现在类和结构体类型中. 属性一般依赖于一个特定类型的实例,但是也可以依赖于类本身.依赖于类型本身的属性称为类型属性. 可以定义属性观察者来监督属性值的改变,从而作出响应.对集合不明白的看集合类型-数组详解 存储属性 常量属性let的值在初始

《从零开始学Swift》学习笔记(Day 31)——存储属性

原创文章,欢迎转载.转载请注明:关东升的博客 Swift中的属性分为存储属性和计算属性,存储属性就是Objective-C中的数据成员,计算属性不存储数据,但可以通过计算其他属性返回数据. 存储属性可以存储数据,分为常量属性(用关键字let定义)和变量属性(用关键字var定义). 存储属性概念: 我们在前面曾用到过属性,Employee类和Department结构体.它们的类图如下,Employee的部门属性dept与Department之间进行了关联. 我们可以在定义存储属性时指定默认值,示例

Swift存储属性

类是由属性和方法组成,属性一般是访问数据成员,在Object-C中,属性是为了访问封装后的数据成员而设计,属性本身不存储数据,数据是由数据成员存储的,而Swift中的属性分为存储属性和计算属性,存储属性就是Object-C中的数据成员,计算属性不存储数据,但可以通过计算其他属性返回值 存储属性可以存储数据,分为常量属性和变量属性 存储属性适用于类和结构体两种面向对象结构类型,枚举属性没有存储属性 1.存储属性概念 class Employee{          let no:Int = 0