首页 > 其他分享 >教你快速了解C语言中的作用域和常量

教你快速了解C语言中的作用域和常量

时间:2023-09-10 23:36:09浏览次数:33  
标签:常量 作用域 C语言 int 枚举 main 变量

(章节目录)

在这里插入图片描述

前言

  哈喽,各位铁汁们好啊!✨今天来给大家带来的是初识C语言里面的作用域常量。   这几章主要带大家简单认识-一下C语言,俗话说没吃过猪肉,也见过猪跑。带大家了解下C语言。可以读懂C语言的简单程序,后期会给大家详细介绍C语言。

一、变量作用域和生命周期

作用域

  • 作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的而限定这个名字的可用性的代码范围就是这个名字的作用域。

那么局部变量和全局变量的作用域的范围是多少呢?

局部变量的作用域

  • 局部变量的作用域是变量所在的局部范围。 因为局部变量只在他所对应的代码段生效,出了他所在的大括号就销毁。 下面我们来看看这段代码
int main()
{
	{
		int a = 6;
	}
	return 0;
}

像这个代码就会报错,因为 变量$a$ 只在他所在的大括号生效出去·就销毁了。

int main()
{
	{
		int a = 100;
	}
	printf("%d\n", a);

	return 0;
}

像这个代码就不会报错,因为 变量$a$ 只在他所在的大括号包含的范围生效,而里面的大括号也在这个范围所以可以使用。

全局变量的作用域

前面介绍了全局变量的的生效范围是全局, 在不同.c文件也可以使用。 有因为我们程序是main()函数开始 出main函数结束 所以: 全局变量的作用域是整个工程。

生命周期

变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段

局部变量的生命周期

局部变量是进局部范围开始创建,出了他的局部范围就销毁。 所以:

  • 局部变量的生命周期是:==***进入作用域生命周期开始,出作用域生命周期结束。***==

全局变量的生命周期

由于我们全局变量的作用域是整个工程 而程序是从进入main( )函数开始,出main( )函数结束。 那么是不是可以说:

  • 全局变量的生命周期是:==***整个程序的生命周期。***==

二、常量

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

  • 字面常量
  • const 修饰的常变量
  • #define 定义的标识符常量
  • 枚举常量

1.1 字面常量

像我们直接写出来的 数字3 字符a 字符串abcd这些都是字面常量 下面我俩给大家演示一下

int main()
{
	3;
	3.15;
	'a';
	"abcd";
	return 0;
}
  • 给大家解释一下单引号 ' '引起来的是字符。
  • 双引号“ ”引起来的是字符串。

1.2   const 饰的常变量

int main()
{
	//常属性
	//这里的a是具有常属性的,不能改变,但是本质上还是变量
	const int a = 3;

	printf("%d\n", a);
	a = 10;
	printf("%d\n", a);
	return 0;
}

这里我们用const关键字修饰了变量a,使这个变量具有了常属性。

  • 常属性就是不能被更改的属性,从语法层面直接限制了这个变量

所以当我们改变这个变量的时候程序就会给我们报错,我们来看看! 在这里插入图片描述

  • 他说左值指定的是const的对象所以不能修改,给我们报错了

<font size = 5 face = "华文彩云" color =red>那么我问大家一个问题?</font>

  • 我们一直在讲变量常量
  • 那么由变量用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$就是$10000$这个数字 创建的数组$arr[MAX]$,是有$10000$个元素 ps: 虽然暂时还没有给各位铁汁讲数组但这里先让大家见识一下 后面会给各位铁汁详细讲解数组,看完秒懂!

1.1  枚举常量

==这里只是给大家简单讲解一下,后面会详细讲解==

<font size = 5>枚举常量</font>

  • 枚举 一一列举

生活中有些值是可以一一列举

  • 性别:男、女、保密
  • 三原色:red green blue
  • 血型: $o$ $x$

那么枚举怎么定义呢?

enum SEX//性别
{
	//列出了枚举类型enum SEX的可能取值
	//枚举常量
	MALE,//男
	FEMALE,//女
	SECRET//保密
};

这里我们就定义了一个枚举常量SEXenum代表的是枚举类型

  • 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;
}

但是大家可别忘,枚举类型他可是个常量<font size = 5 face = "华文彩云" color =red>怎么能这样修改呢!</font> 所以他肯定会给我们报错。

  • 枚举类型的常量想修改,只能修改初始值
enum SEX
{
	MALE=4,
	FEMALE,
	SECRET
};

这里我们就把SEX这个枚举类型MALE的初始值修改成了4 所以程序运行的结果是 在这里插入图片描述 ==我们也可以给每一个枚举常量单独赋值==

enum SEX
{
	//列出了枚举类型enum SEX的可能取值
	//枚举常量
	MALE=4,
	FEMALE=8,
	SECRET=11
};

在这里插入图片描述

总结

好了今天主要是带大家认识变量和常量 总结一下今天学了:   变量作用域   变量的生命周期   字面常量   const 修饰的常变量   #define 定义的标识符常量   枚举常量 不知道大家掌握了没有,希望对各位铁汁有用呢! 看到这里了还不给博主扣个点赞收藏

标签:常量,作用域,C语言,int,枚举,main,变量
From: https://blog.51cto.com/u_16163707/7428772

相关文章

  • 我个人学习C语言的近期规划
    一.困难点最近我发现学习C语言已经变得越发的困难,接下来我说一下主要的困难点1.学习时很多前面用到的知识点已经遗忘,需要通过重复学习和看笔记才能勉强理解2.写代码时候逻辑经常出现混乱,会写出很多的bug3.困难点(对我来说)第一个就是从函数的递归开始代码很难进行构思,多次递归后就会......
  • C语言中几种类型所占字节数
    类型16位32位64位char111shortint222int244unsignedint244float444double888long448longlong888unsignedlong448......
  • C语言宏定义中的#和##(转)
    https://www.jb51.net/article/282832.htm #和##是宏定义中常用的两个预处理运算符1.记号串化(#)2.记号黏结(##)3. 分析下列程序运行结果#和##是宏定义中常用的两个预处理运算符其中#用于记号串化,##用于记号黏结,下面分别介绍它们。1.记号串化(#)记号串化可以......
  • 2-2C语言学习
    #include<stdio.h>voiddouble_value(doublen);intmain(){ doublevalue; printf("Pleaseenterthedoublevalue:"); scanf_s("%lf",&value); while(value>0.00) { double_value(value); printf("\nPleaseentert......
  • 初识c语言
    1.什么是c语言c语言是一门计算机语言(计算机语言是什么呢?  人与计算机交流的语言  还有C/C++/JAVA//python)2.第一个代码1.创建工程(新建项目C++空项目)2.添加源文件(视图-解决方案管理器).c-源文件.h-头文件head#include<stdio.h>intmain()//主函数-程序的入口-main函数......
  • C语言---数据存储
    我们知道一个变量在内存中存储是要开辟一块内存空间来存储的,那么该为这个变量开辟多大的内存空间呢?这个要依据变量的类型,我们知道int类型的变量大小是4个字节,char类型的变量大小是1个字节,创建一个变量时,根据其类型来为变量申请对应大小的空间。问题:那么不同类型的数据在内存中到底......
  • 系统入门C语言的寄存器
    你好,我是悦创。本篇为C语言一对一辅导笔记节选,我们来系统地了解C语言中与寄存器相关的内容。1.什么是寄存器?寄存器是位于CPU内部的小型、高速的存储单元,它们的访问速度远高于主内存。在执行程序时,常用的数据和指令经常被加载到这些寄存器中,以加速程序的运行。2.register关键字在......
  • C语言求1000以内所有的水仙花数
    求1000以内所有的水仙花数何为水仙花数一个3位整数的各位数字的立方之和等于这个整数,称之为“水仙花数”。例如:153是水仙花数,因为153=1*1*1+5*5*5+3*3*3。先看代码#include<stdio.h>#include<math.h>intmain(){inti,a,b,c,d;for(i=100;i<1000;i++)......
  • C语言:数据类型之整形(一)
     什么是数据?记录一天各个时间的温度,那么这个温度就是数据.记录一个水库水位的变化值,那么这个值就是数据.什么是数据类型?1215是整数12.23是小数"helloworld"是一段话基本数据类型:数值类型:整形,浮点型。整形顾名思义就是整数,像:1,2,3,4,5就是整形整形在C语言的关键字是:int......
  • Go类型全解:常量与变量大全!
    本篇文章深入探讨了Go语言中类型确定值、类型不确定值以及对应类型转换的知识点,后续充分解析了常量与变量及其高级用法,并举出丰富的案例。关注公众号【TechLeadCloud】,分享互联网架构、云服务技术的全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,......