c语言 变量的类型和作用域,存储类型和变量的作用域(C语言)

这里将告诉您存储类型和变量的作用域(C语言),具体完成步骤:

1、数据在内存中的存储

在计算机中,用于存程序和数据的物理单元有寄存器和随机存储器(RAM)。寄存器速度快,空间少,常常只存放参加运算的少数变量。RAM比寄存器速度慢,但空间大,可存放程序和一般数据。RAM又分为堆栈区、系统区、程序区和数据区

(1)堆栈区:用于临时存放数据的内存单元,它具有先进后出的特性。堆栈区的数据可不断被覆盖。

(2)系统区:存放系统软件(操作系统、语言编译系统等)

(3)程序区:存放程序的内存,程序运行时不可被覆盖

(4)数据区:存放程序数据,说明该变量的程序结束时释放

2、变量的存储类型

一个变量的完整定义应该包括数据类型和存储类型,且无先后顺序。用来说明存储类型的保留字有4个:auto(自动)、register(寄存器)、static(静态)、extern(外部)。

(1)自动变量:也称局部变量。用保留字auto表示,通常省略。存储在堆栈区,从存储位置划分,属于内存变量;从变量的生存期划分,属于动态存储变量。void main(){ //在main中定义auto变量num,可以在main中使用 auto int num; { //在代码块中定义一个num2,只能在代码块使用 auto int num2 = 10; printf("%d", num2); } //这句话会报错 printf("%d", num2); scanf("%d", &num); printf("%d", num);}

(2)寄存器变量:也是自动变量,用register表示。区别在于,寄存器变量的值存在CPU的寄存器中。计算机只有寄存器才能直接参与运算,而一般变量需要先把内存中的值读取到寄存器中,寄存器运算后再把结果放到内存中。为了提高运算速度,可以把循环变量定义成寄存器变量。void main(){ //寄存器变量和auto变量很类似,但是寄存器变量存储在寄存器上, //计算速度快,可以用来定义循环变量 register int i; for(i = 0; i < 10; i++){ printf("%d", i); }}

(3)静态变量:可以说明局部变量,也可以说明全局变量。static型变量一般存储在数据区,该变量创建后,随着文件的存在而存在。//定义全局的静态变量static int num1 = 10;void demo(); //声明方法void main(){ //定义局部的静态变量 static int num2 = 20; //在main中,可以使用main中的局部变量num2,也可以使用全局变量 printf("num1=%d, num2=%d", num1, num2);}void demo(){ //在demo中,可以使用全局变量 printf("%d", num1); //但是使用main中的局部变量会报错 printf("%d", num2);}

(4)外部类型:用extern表示,只能说明全局变量。存储在内存的应用区,程序运行时一直存在。extern int num = 10;void main(){ printf("%d", num);}

3、变量的作用域和生存期

作用域和生存期总结为下面这张表:

7cd4de69b374faf0896b35e05327899c.png

本文分享自微信公众号 - ZackSock(AndrewRubin)

原文出处及转载信息见文内详细说明,如有侵权,请联系 删除。

原始发表时间:2019-09-21

存储类型和变量的作用域(C语言)就为您介绍到这里,感谢您关注懒咪学编程c.lanmit.com.

本文地址:https://c.lanmit.com/gengduokaifa/32497.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值