变量与常量

变量与常量:

什么是变量?什么又是常量?

在生活中的有些值是不变的(比如:圆周率,性别,身份证号码,血型等等)
有些值是可变的(比如:年龄,体重,薪资) 。                                                                                  在C语言中不变的值用 常量 的概念来表示,变得值用 变量 来表示。

变量的定义:

变量是由:变量类型 + 变量名 + 初始化

蓝色标注的就是前面介绍的类型,黑色的则是变量名它是由我们自己取得 ( 但最好取一个有意义的名字方便自己和别人知道它的用处 ),赋值(=号在C语言里是赋值的意思)加对应的数据就是初始化。                                                                                                                                                           有一点值得注意,我们在看一些C语言教材时里面的内容往往不会将变量的初始化,但这是一个不好的习惯。

那为啥呢?

如果不将其初始化那么变量里会进入随机值,有些编译器甚至会闹脾气报警告。

 

我们看到警告的原因是,“局部变量age使用了,但是没有给它初始化”,也就是说未初始化就使用它了。

这里提到了局部变量的概念,那什么是局部变量呢?有局部那有没有全局变量呢?

变量的分类:

局部变量 :

全局变量 :

什么是局部变量变量和全局变量?                                                                                                      为啥有全局变量和局部变量之分?

所谓的局部变量就是定义在代码块类的变量,而全局变量就是定义在代码块外的变量

???什么又是代码块?

代码块就是{... ...}就是这样的括号,而在着里面定义的变量就局部变量,定义外面的就是全局变量。上代码

这里的a和b就是就是局部变量。那b不是定义在代码块外的吗?注意这里b虽然不在a所在的代码块内,但它本身仍在代码块内。只有像g这样不在任何代码块内的才叫全局变量。                              有写教材上写,局部变量是定义在函数内部的变量这其实不严谨的。

那如果全局变量和局部变量的名字冲突了会怎么样,会报错吗?

我们看到并没有,而是在屏幕上输出了一个50。                                                                                没错当全局变量和局部变量命名起冲突时局部变量优先使用。

那为什么要有全局变量和局部变量之分呢                                                                                          那就不得不提到作用域和生命周期的概念

变量的作用域和生命周期:

作用域:

作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用
的而限定这个名字的可用性的代码范围就是这个名字的作用域。
通俗来说就是变量只在一个范围内有效,出这个范围就会失效。
局部变量: 局部变量的作用域是变量所在的局部范围
全局变量: 全局变量的作用域是整个工程
什么意思呢,也就说局部变量的作用域是在局部变量所在的代码块内。
而全局变量的作用域是整个工程,也就说在这个工程的代码块内外都能用。
上代码

 这个报错的意思是:找不到g这个变量。

局部变量g只能它所在的代码块内使用,出了这个作用域就不能使用了。

而全局变量则可以在这个工程内使用它,但然也可以在这个工程中的其他文件中使用

xtern 是个C语言的关键字,它的作用是声明外部符号。就是告诉编译器这有个变量,是什么类型、名字是什么.....

生命周期:

变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段
局部变量的生命周期是: 进入作用域生命周期开始,出作用域生命周期结束。
全局变量的生命周期是: 整个程序的生命周期。
局部变量的生命周期就是在进入代码块开始到出这个代码块结束,全局变量的生命周期是从创建这个程序开始到销毁这个程序。 
这就是为什么在代码块外无法访问这个变量的原因,因为这个 变量的生命已经结束了

回到之前的问题为啥有全局变量和变局部量之分?直接全部全局变量不好吗?

还记得之前说的变量的创建需要根据类型去申请对应的字节数吗?                                                  全局变量的生命周期时整个程序的生命周期,也就是说直到程序结束全局变量才会把之前申请的内存单元还给内存如果申请,因此过多的全局变量会占用较多的内存单元。

当然全局变量和局部变量的特点不止这一点,全局变量和局部变量是为了代码的灵活性,便于使用。

常量:

C语言中的常量和变量的定义的形式有所差异。

C语言中的常量分为以下以下几种:

字面常量

const 修饰的常变量

#define 定义的标识符常量

枚举常量

字面常量:

字面常量不多介绍如图:

const 修饰的常变量:

const是C语言的关键字它的作用是修饰变量,使得变量拥有常属性

 这里编译器报了一个错:左边必须是可以修改的值。所谓常属性就是不能被修改,但可以进行初始化。 

 注:上面例子上的 n 被称为 const 修饰的常变量, const 修饰的常变量在C语言中只是在语法层面限制了 变量 n 不能直接被改变,但是 n 本质上还是一个变量的,所以叫常变量。

#define 定义的标识符常量:

#define是C语言的预处理指令,预处理也就是在编译之前进行的处理,在编译之前会进行替换。

什么意思呢?

                               

在这里MAX等价于100,预处理也就是说在进行编译之前会把MAX给替换成100。

 大概就是这样(我这里是自己改的,便于理解),当然MAX也有常属性。

 

枚举常量:

枚举的意思就是枚举出可能的取值,然后给定该值就无法修改。

enum是枚举关键词 Sex是你要枚举什么(我这里要枚举的是三原色)用一对{}框起来外面有一个分号,里面就是枚举的可能取值用逗号隔开。(那些枚举的可能取值就是枚举常量)                               在这里我们一一打印出枚举常量的取值发现它们有一个初始的值。

注:枚举常量的默认是从0开始,依次向下递增1的

 如果对其修改编译器就会报错,说:SECRET是常量。

 注:枚举常量可以初始化(初始化,就是在创建时赋值)

 

在路上!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值