C——变量的作用域与存储类

1、变量的作用域

1.1、作用域

  • 所谓作用域就是变量的有效范围

1.2、局部变量

  • 定义:在复合语句内部函数内部定义的变量称为局部变量

  • 局部变量作用域:自定义位置起,到符合语句函数的结束

  • 在不同作用域内变量名可以重名

  • 内部与外部变量同名,内部变量优先(就近原则)

    int main(){
    	int a=3,b=0;
    	{
    		int a=5;
    		b+=a;
    	}
    	b*=a;
    	printf("%d\n",b);
    	return 0;
    }
    输出结果:15
    

1.3、全局变量

  • 定义:自函数外部定义的变量称为全局变量
  • 作用域:自定义位置起,到整个程序的结束
int a=3;
int main(){
	int s=0;
	{
		int a=5;
		s+=a++;
	}
	s+=a++;
	printf("%d\n",s);
	return 0;
}
输出结果:8

2、变量的存储类

2.1、自动型(auto)

  • 函数中的局部变量,默认都是动态分配存储空间的

  • 调用该函数时系统会给这些变量分配存储空间

  • 函数调用结束时就自动释放存储空间

  • 这类局部变量称为自动变量,用关键字auto作存储类别声明

    auto	 			int 				a;
    (可省略)存储类		类型名				变量名
    

2.2、寄存器型(register)

  • 用register声明的变量是寄存器变量,是存放在CPU的寄存器里的。而我们平时声明的变量是存放在内存中的。虽说内存的速度已经很快了,不过跟寄存器比起来还是差得远。

2.3、静态型(static)

  • 静态局部变量的值在函数调用结束后不消失,而保留原值,即其占用的存储单元不释放

  • 仅允许当前文件使用

    int fun(int n){
    	static int s=2;
    	s+=n;
    	return s;
    }
    int main{
    	int x=2;
    	printf("%d\n",fun(x));
    	printf("%d\n",fun(x));
    	return 0;
    }
    输出结果:
    4
    6
    

2.4、总结

  1. auto自动型:默认的类型
  2. register:寄存器型
  3. static:静态型、内部变量、内部函数,仅允许当前文件使用
  4. extern:外部变量、外部函数允许其它文件使用

3、动态存储方式与静态存储方式

  • 从变量值的生存期角度划分,可以分为静态存储方式和动态存储方式
    1. 静态:整个程序
    2. 动态:函数调用结束
  • 静态区:变量类型
    1. 静态局部变量
    2. 全局变量或外部变量
    3. 初始化在编译阶段、初值为0
  • 动态区:变量类型
    1. 动态变量
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小吴在敲Bug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值