C-变量的作用域和存储类型

先来个大总结:

a.变量的存储方式:动态存储(自动、寄存器)、静态存储(静态和外部)

b.由变量的存储方式不同而产生的特性称为变量的生存期(变量的存在时间)

c.基本类型的静态变量系统默认赋初值为0

d.静态变量的生存期为整个源程序,作用域只是定义它的文件(若程序由一个源文件构成时,全局变量与全局静态变量没有区别。)(第四个例子)

e.函数被调用时,其中的局部静态变量的值保留前次被调用的结果

f.根据变量的作用域可以将变量划分为:局部变量和全局变量

---------------------------------------------------------------------------------------------------------

 

什么代码块:程序中被一对大括号括起来的区域就叫代码块。分支语句、循环语句等也是代码块。

函数体里肯定有很多个代码块。但是“作用域”是不同的。

作用域:顾名思义,就是变量起作用的范围,也就决定了变量的可访问性。

先看下这个代码:

int main()
{
   int num = 9;
   {
       int num = 90;
       printf("%d\n",num);
       printf("-----\n");
   }
    printf("%d\n",num);

卧槽,竟然发现两个不同的变量的名字是可以再同一个mian函数里的,但是它们作用的范围不一样,也就是说它们不是同一个空间里。

再把程序改一下

报错信息说num2没有被定义。

但是这样的话就有结果,说明再同一个main下小的作用域可以用大的(变量),而大的不能用小的(变量)

 

--------------------------------------------------------------------------------------------------------

变量只存在于定义它们的代码块中;变量存在的时间称为变量的生存期。

-------------------------------------------------------------------------------------------------

下面来介绍变量的存储类型:

分为四种:

a.自动变量:格式 auto 类型名 变量名;auto int temp;auto是可以省略不写的,所以如果没有指定变量的存储类型,那就是自动变量了

b.寄存器变量:寄存器就在cpu上,速度仅此于cpu,少用好吧,除非是达到几十万次的循环,否则就牛刀小试了

c.静态变量:若想保持上一次退出函数前所拥有的值,就用它,下面举例也会用到,它的生存周期从程序开始到程序结束。

d.外部变量:没什么要多注意的点,就是生存周期和静态变量差不多,下面举例的代码会用到

 

第一个例子:用static

发现设置了静态变量后count就=4了,不用的话count就是局部变量了,它每次都会初始为0.去掉的话就是count = 1。

 

第二个例子:局部变量。

函数调用一结束,局部变量的空间就被释放了。所以值还是5和8。

 

第三个例子:

在函数里面定义一个数组,再在主函数里调用,因为是局部变量,所以全部打印的就不是函数里设置的。打印的是随机的。

第四个例子:注意的点:a.全局变量的作用域就是当前源文件,其他文件不行,若其他文件想要调用,就得同extern来引入这个变量

main.c中代码:

one.c中代码:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值