第八章 变量的作用域和储存类别

第八章 变量的作用域和储存类别

主要问题:变量的作用域生存周期

8.1变量的作用域

【定义】:给变量分配确定的储存单元;

【说明】:说明变量的性质,并不是分配确定的储存单元;

​ C语言中变量按作用域范围分为:局部变量和全局变量。

8.1.1局部变量

【局部变量】:在一个函数内部或复合语句内部定义的变量。

作用域:定义该变量的函数内或定义该变量的符合语句内,只能在定义它的函数或复合语句内才能使用。

在这里插入图片描述

【注意】:

1.形参变量属于被调函数的局部变量,实参属于主调函数的局部变量。

2.局部变量可同名,即允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配不同单元,互不干扰。

【例】

#include<stdio.h>
int a=3,b=5;   //a,b为全局变量,作用范围到本程序结束
max(int a,int b)
/*a、b为局部变量*/
{
    int c;
    c=a>b?a:b;   //形参a、b的作用范围
    return c;
}
main(){
    int a=8;   /*a为局部变量*/
    printf("%d",max(a,b));
    /*局部变量a的作用范围*/
}

//运行结果:8

8.1.2 全局变量

【全局变量】:在函数外部任意位置定义的变量。

作用域:从定义变量的位置到本源文件结束,它可以被本源程序文件的其他函数共用。

8.2变量的存储类别

变量的存储方式按变量值的生存期可划分为静态存储方式和动态存储方式。

【静态存储方式】:程序运行期间分配固定的储存空间。

【动态存储方式】:程序运行期间按需要动态分配储存空间。

与之相关的4个说明符:auto(自动的)、static(静态的)、register(寄存器的)、extern(外部的)。

【格式】:储存类别 数据类型 变量名1…变量名n

eg:auto int i,j 或int auto i,j

动态储存区存放数据:

1.函数形参变量,调用时分配储存空间。

2.局部变量。

3.函数调用时的现场保护和返回地址。

8.2.1 auto(自动)变量

​ 局部变量可声明为自动变量,全局变量不能声明为自动变量

特点:

1.内存分配:调用函数或执行复合语句是时,在动态存储区为其分配储存单元,执行结束后所占空间立即释放。

2.变量初值为随机值。若赋初值,则每次函数被调用时执行一次赋值操作。

3.生存期:函数或复合语句执行期间。

4.作用域:自动变量定义位置开始到函数体(或复合语句)结束。

8.2.2 static(静态)变量

【说明】:1.除形参外,局部变量和全局变量都可定义为静态变量。

8.2.3 register(寄存器)变量

【说明】:将变量的值保存到cpu的寄存器中,不占据内存单元,且访问速度快。

​ 适用于:频繁引用的少数变量。

在这里插入图片描述

8.2.4 extern 变量

在这里插入图片描述
在这里插入图片描述

8.3 函数的储存分类

在这里插入图片描述

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值