变量四种属性

变量的属性(四种)

(1)数据类型:
(2)存储类别(4种):
    auto(自动的)、static(静态的)、extern(外部的)、register(寄存器的)。
(3)作用域:程序中能引用该变量的区域(变量的有效作用范围)。
    文件作用域(全局)、函数作用域、块作用域、函数原型作用域。
(4)存储周期:在内存的存储周期。

(3)作用域:

局部变量(内部变量/local variable):只在本函数范围有效。
  1.复合语句中定义的变量只在复合语句范围内有效。
  2.不同函数中可使用同名变量,互不干扰。
  3.形參也属于局部变量。
  4.函数声明的参数名只在括号范围有效,非实际存在变量,不能被引用,没分配存储单元。
全局变量(外部变量/全程变量/global variable):从定义变量位置到本源文件结束。
1.增加了函数间数据联系的渠道。
2.非必要时,不适用。原因:一直占用存储单元,使函数通用性降低,容易混淆。
3.同一源文件,局部和全局同名时,局部变量优先。
PS:局部变量和全局变量两个不同:一、作用域,二、存储位置。

(4)存储周期(生命期):

  静态存储期:程序运行期间,系统对变量分配固定的存储空间
    如:全局变量(执行过程中一直占据,执行完毕释放)。
  动态存储期:程序运行期间,系统对变量动态地分配存储空间
    如:1. 函数形参 2. 局部变量(未加static)3. 函数调用时现场保护和返回地址等。

变量的存储空间可分为三部分:

(1)程序区 (2)静态存储区 (3)动态存储区

变量在程序中工作状况:

  变量的值存放在内存中,当程序中需要用到哪一个变量的值时,由控制器发出指令将内存中该变量的值送到CPU的运算器。经过运算器进行运算,若需要存数,再从运算器将数据送到内存中存放。

(2)存储类别

(1)auto(自动的)

  默认,关键字可忽略不写。

(2)register(寄存器的)

  允许将局部变量的值放到CPU的寄存器中,需要的时候直接从寄存器中取出参与运算,不必去内存中去存取,提高了执行效率。
  注意:对编译系统只是建议性(非强制性),现今优化编译系统能够识别使用频繁的变量,从而自动地将这些变量放在寄存器中,而不需要程序设计者指定。

(3)static(静态的)

  局部变量的值,在函数调用结束后不消失而保留原值(占用的存储单元不释放)
PS:局部变量存“动态存储区”,加上static后存“静态存储区”,即:其他函数不可见的全局变量(局部变量的作用域,全局变量的存储空间)
  静态局部变量:若不赋初值,自动赋0或空字符。
  自动局部变量:若不赋初值,不确定额值。

  修饰外部变量时,限定只能被本文件引用,不能被其他文件引用。
全局变量本身存在静态存储区,现在一样,没有改变。仅仅限定了全局变量的作用域只能在本文件中,与extern修饰的全局变量相对。
PS:static修饰的变量都是存在静态存储区

(4)extern(外部的)

全局变量又叫外部变量,若在全局变量前用extern声明(只做声明,不能定义),可扩展作用域,
根据作用范围分为:
1.一个文件内:
  全局变量作用域:定义处到文件结束。
若加上extern,作用域扩展到定义点之前。
PS:从声明处(定义点之前)到文件结束,称为:提前引用声明
故一般全局变量定义放在所有函数之前,即可省略extern。

2.多个文件
外部变量声明:若本文件没找到,则从程序连接时从其他文件找。
PS:避免一个程序包含多个文件时,用到同一个变量时,出现“重复定义”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值