C语言-变量

1 变量类型

局部变量

也称为内部变量。局部变量是在函数内作定义说明的。

全局变量

也称为外部变量。它是在函数外部定义的变量。它不属于哪一个函数,它属于一个源程序文件。

 auto变量

函数中的局部变量,函数中的形参和在函数中定义的变量(包括在复合语句中定义的变量),都属此类。自动变量用关键字 auto 作存储类别的声明。关键字 auto可以省略,auto 不写则隐含定为“自动存储类别”。

用static声明局部变量
      有时希望函数中的局部变量的值在函数调用结束后不消失而保留原值,这时就应该指定局部变量为“静态局部变量”,用关键字 static 进行声明。

register变量
        为了提高效率,C 语言允许将局部变量的值放在 CPU 中的寄存器中,这种变量叫“寄存器变量”,用关键字 register 作声明。
        1)  只有局部自动变量和形式参数可以作为寄存器变量;
        2)  一个计算机系统中的寄存器数目有限,不能定义任意多个寄存器变量;
        3)  局部静态变量不能定义为寄存器变量;

用extern声明外部变量:
外部变量(即全局变量)是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。

如果外部变量不在文件的开头定义,其有效的作用范围只限于定义处到文件终了。

如果在定义点之前的函数想引用该外部变量,则应该在引用之前用关键字 extern对该变量作“外部变量声明”。表示该变量是一个已经定义的外部变量。有了此声明,就可以从“声明”处起,合法地使用该外部变量。

2 定义和声明

  • 定义包含了声明,但是声明不包含定义
  • 变量定义:用于用于向程序表明变量的类型和名字,并为变量分配存储空间,还可为变量指定初始值。
  • 变量声明:用于向程序表明变量的类型和名字
  • 在一个程序中,变量只能定义一次,却可以声明多次。

int a = 0;     //定义并声明了变量 a

extern int a;  //只是声明了有一个变量 a 存在,具体 a 在哪定义的,需要编译器编译的时候去找。

函数也是类似,定义的时候同时声明。但如果只是声明,编译器只知道有这么个函数,具体函数怎么定义的要编译器去找。

void fun1();  //函数声明

void fun1()//函数定义

{  

cout<<"fun1"<<endl;

}

程序设计风格

    1. 不要把变量定义放入.h文件,这样容易导致重复定义错误。

    2. 尽量使用static关键字把变量定义限制于该源文件作用域,除非变量被设计成全局的。

    3. 可以在头文件中声明一个变量,在用的时候包含这个头文件就声明了这个变量。 

3 作用域

局部变量

  • 自动变量auto,即动态局部变量【离开函数,值消失
  • 静态局部变量static【离开函数,值还保留
  • 寄存器局部变量register【离开函数,值消失
  • 形式参数可以定义为自动变量或者register变量

全局变量

  • 静态外部变量【作用域只能在该文件中,文件作用域
  • 外部变量【非静态外部变量,全局变量,可以被其它文件使用

4 生命周期

动态存储

  • 自动变量auto
  • 寄存器变量register
  • 形式参数

静态存储

  • 静态局部变量
  • 静态外部变量
  • 外部变量(全局变量)

5 存储区域

 

内存中的静态存储区(全局数据区) 

  • 静态局部变量
  • 静态外部变量
  • 外部变量(全局变量)

内存中的动态存储区(栈)

  • 自动变量auto
  • 形式参数

CPU中的寄存器

  • 寄存器变量register

局部静态(static)变量,作用域为局部,而生命周期是全程。 静态局部变量属于静态存储方式,它具有以下特点:

  1. 静态局部变量在函数内定义,但不像自动变量那样,当调用时就存在,退出函数时就消失。静态局部变量始终存在着,也就是说它的生存期为整个源程序。
  2. 静态局部变量的生存期虽然为整个源程序,但是其作用域仍与自动变量相同,即只能在定义该变量的函数内使用该变量。退出该函数后, 尽管该变量还继续存在,但不能使用它。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值