一文教你快速了解C语言中的作用域和常量
前言
哈喽,各位铁汁们好啊!✨今天来给大家带来的是初识C语言里面的作用域、常量。
这几章主要带大家简单认识-一下C语言,俗话说没吃过猪肉,也见过猪跑。带大家了解下C语言。可以读懂C语言的简单程序,后期会给大家详细介绍C语言。
一、变量作用域和生命周期
作用域
作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的而限定这个名字的可用性的代码范围就是这个名字的作用域。
那么局部变量和全局变量的作用域的范围是多少呢?
局部变量的作用域
局部变量的作用域是变量所在的局部范围。
因为局部变量只在他所对应的代码段生效,出了他所在的大括号就销毁。
下面我们来看看这段代码
int main() { { int a = 6; } return 0; }
像这个代码就会报错,因为 变量 a a a 只在他所在的大括号生效出去·就销毁了。
int main() { { int a = 100; } printf("%d\n", a); return 0; }
像这个代码就不会报错,因为 变量 a a a 只在他所在的大括号包含的范围生效,而里面的大括号也在这个范围所以可以使用。
全局变量的作用域
前面介绍了全局变量的的生效范围是全局, 在不同
.c
文件也可以使用。
有因为我们程序是main()函数开始
出main函数结束
所以:全局变量的作用域是整个工程。
生命周期
变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段
局部变量的生命周期
局部变量是进局部范围开始创建,出了他的局部范围就销毁。
所以:
局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
全局变量的生命周期
由于我们全局变量的作用域是整个工程
而程序是从进入main( )
函数开始,出main( )
函数结束。
那么是不是可以说:
全局变量的生命周期是:整个程序的生命周期。
二、常量
C语言中的常量分为以下以下几种:
- 字面常量
const
修饰的常变量#define
定义的标识符常量- 枚举常量
2.1 字面常量
像我们直接写出来的
数字3
字符a
字符串abcd
这些都是字面常量
下面我俩给大家演示一下
int main() { 3; 3.15; 'a'; "abcd"; return 0; }
给大家解释一下单引号 ' '
引起来的是字符。
双引号“ ”
引起来的是字符串。
2.2 const 饰的常变量
int main() { //常属性 //这里的a是具有常属性的,不能改变,但是本质上还是变量 const int a = 3; printf("%d\n", a); a = 10; printf("%d\n", a); return 0; }
这里我们用
常属性就是不能被更改的属性,从语法层面直接限制了这个变量const
关键字修饰了变量a,使这个变量具有了常属性。所以当我们改变这个变量的时候程序就会给我们报错,我们来看看!
他说左值指定的是const
的对象所以不能修改,给我们报错了
那么我问大家一个问题?
- 我们一直在讲变量和常量
- 那么由变量用
const
修饰的常变量可以当成常量用吗? - 可以不可以实践便知:来看下面这段代码
int main() { //数组 const int n = 10; int arr[n]; return 0; }
他给我们的报错是这样的,我来给大家解释一下:
arr数组【】里面必须输入常量表达式
我们明明已经将
诶,是不是很奇怪。变量 n
,用const修饰成了常变量为什么他还提示我们输入常量呢?
这说明关键字const虽然把变量n修饰成了常变量。但是变量a本质上还是变量所以不能被当来常量使用。
1.1 #define 定义的标识符常量
什么是 #define 定义的标识符常量呢?
#define MAX 10000 //符号名是MAX 本质上代表的数字是10000 int main() { int a = MAX; int arr[MAX] = {0}; printf("%c", a); return 0; }
#define MAX 10000
这里#define定义了一个MAX常量
- 符号名是
MAX
本质上代表的数字是10000
- 这里代表的意思是10000本来是没有什么意义的,
- 但是我们需要一个
最大值MAX
,我们把10000定义
成我们的最大值- 以后我们的最大值MAX代表的就是10000
所以我们赋给变量 a a a就是 10000 10000 10000这个数字
创建的数组 a r r [ M A X ] arr[MAX] arr[MAX],是有 10000 10000 10000个元素
ps:
虽然暂时还没有给各位铁汁讲数组但这里先让大家见识一下
后面会给各位铁汁详细讲解数组,看完秒懂!
1.1 枚举常量
这里只是给大家简单讲解一下,后面会详细讲解
枚举常量
枚举 一一列举
生活中有些值是可以一一列举
性别:男、女、保密
三原色:red green blue
血型: o oo x xx
那么枚举怎么定义呢?
int main() { printf("%d\n", MALE); printf("%d\n", FEMALE); printf("%d\n", SECRET); return 0; }
这里我们就定义了一个枚举常量SEX
,enum
代表的是枚举类型
MALE代表的是枚举——列举的类型
枚举类型的值是多少呢?
我们来看一下
int main() { printf("%d\n", MALE); printf("%d\n", FEMALE); printf("%d\n", SECRET); return 0; }
我们可以看到枚举常量的默认值是从0开始依次递增的。
枚举类型的值怎么修改?
相信各位铁汁们,都想说修改那不是很简单直接改值不就完了。
int main() { enum SEX s = FEMALE; printf("%d\n", MALE); return 0; }
但是大家可别忘,枚举类型他可是个常量。
怎么能这样修改呢!
所以他肯定会给我们报错。
枚举类型的常量想修改,只能修改初始值
enum SEX { MALE=4, FEMALE, SECRET };
这里我们就把SEX这个枚举类型
,MALE
的初始值修改成了4
所以程序运行的结果是
我们也可以给每一个枚举常量单独赋值
enum SEX { //列出了枚举类型enum SEX的可能取值 //枚举常量 MALE=4, FEMALE=8, SECRET=11 };
总结
好了今天主要是带大家认识变量和常量
总结一下今天学了:
变量作用域
变量的生命周期
字面常量
const 修饰的常变量
#define 定义的标识符常量
枚举常量
不知道大家掌握了没有,希望对各位铁汁有用呢!
到此这篇关于C语言中的作用域和常量的文章就介绍到这了,更多相关C语言作用域和常量内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
浅析C++ atomic 和 memory ordering
这篇文章主要介绍了C++ atomic 和 memory ordering的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2022-04-04
最新评论