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

 更新时间:2023年06月19日 10:33:59   作者:鸽芷咕  
作用域(scope)是程序设计概念,通常来说一段程序代码中所用到的名字并不总是有效/可用,下面这篇文章主要给大家介绍了关于如何快速了解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;
}

这里我们就定义了一个枚举常量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;
}

但是大家可别忘,枚举类型他可是个常量。

怎么能这样修改呢!

所以他肯定会给我们报错。

枚举类型的常量想修改,只能修改初始值

enum SEX
{
	MALE=4,
	FEMALE,
	SECRET
};

这里我们就把SEX这个枚举类型MALE的初始值修改成了4

所以程序运行的结果是

我们也可以给每一个枚举常量单独赋值

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

总结

好了今天主要是带大家认识变量和常量

总结一下今天学了:

  变量作用域
  变量的生命周期
  字面常量
  const 修饰的常变量
  #define 定义的标识符常量
  枚举常量

不知道大家掌握了没有,希望对各位铁汁有用呢!

到此这篇关于C语言中的作用域和常量的文章就介绍到这了,更多相关C语言作用域和常量内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 数组名不等于指针 sizeof()函数求数组大小错误问题及解决

    数组名不等于指针 sizeof()函数求数组大小错误问题及解决

    这篇文章主要介绍了数组名不等于指针 sizeof()函数求数组大小错误问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • C++轻松实现字符串与字符数组的相互转换

    C++轻松实现字符串与字符数组的相互转换

    本文详细介绍了如何在C++中通过c_str()和strcpy()函数将字符串转换为字符数组,以及使用for循环、+运算符、重载=和内置构造函数将字符数组转换为字符串的方法,需要的朋友可以参考下
    2025-03-03
  • MacOS下C++使用WebRTC注意事项及问题解决

    MacOS下C++使用WebRTC注意事项及问题解决

    这篇文章主要介绍了MacOS下C++使用WebRTC注意事项,对于iOS/macOS平台,开启openh264,去除test,使用一些命令可以轻松解决,下面小编给大家带来了问题及解决方法,需要的朋友可以参考下
    2022-09-09
  • OpenCV鼠标绘制矩形和截取矩形区域图像

    OpenCV鼠标绘制矩形和截取矩形区域图像

    这篇文章主要为大家详细介绍了OpenCV鼠标绘制矩形和截取矩形区域图像,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • C++小知识:不要去做编译器的工作

    C++小知识:不要去做编译器的工作

    今天小编就为大家分享一篇关于C++小知识:不要去做编译器的工作,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • C语言中如何获取函数内成员的值你知道吗

    C语言中如何获取函数内成员的值你知道吗

    这篇文章主要为大家详细介绍了C语言中如何获取函数内成员的值的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • 用C语言获取文件的大小示例分享

    用C语言获取文件的大小示例分享

    在linux下获取一个指定文件大小(字节为单位)的代码。查了一下发现是使用系统调用stat来实现,那么如何使用C语言或C++语言来写一个通用的函数来获取指定文件大小的函数呢?
    2014-08-08
  • Visual Studio 2022 安装低版本 .Net Framework的图文教程

    Visual Studio 2022 安装低版本 .Net Framework的图文教程

    这篇文章主要介绍了Visual Studio 2022 如何安装低版本的 .Net Framework,首先打开 Visual Studio Installer 可以看到vs2022 只支持安装4.6及以上的版本,那么该如何安装4.6以下的版本,下面将详细介绍,需要的朋友可以参考下
    2022-09-09
  • 使用 c++ 在 windows 上定时执行一个函数的示例代码

    使用 c++ 在 windows 上定时执行一个函数的示例代码

    这篇文章主要介绍了使用c++在windows上稳定定时执行一个函数,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • C++ OpenCV实现图像去水印功能

    C++ OpenCV实现图像去水印功能

    本文将介绍如何使用OpenCV C++ 进行简单图像水印去除。我们在网上download图片时,经常因为版权问题有水印。本案例通过编写算法进行简单水印去除。需要的可以参考一下
    2022-01-01

最新评论