C语言变量和常量


前言

上一篇文章已经介绍了C语言中有关变量的一些内容,包括如何定义变量、变量的分类:局部变量和全局变量、如何使用变量,本章学习一下变量剩下的内容:变量的作用域和生命周期,以及常量的相关内容。


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

1.变量的作用域

作用域就是限定变量可用性的代码范围

  • 局部变量的作用域:就是变量所在的局部范围
//作用域和生命周期
// 
//作用域
//
//局部变量的作用域:就是变量所在的局部范围
int main()
{
	{
		int a = 10;
		printf("a=%d\n", a);
	}
	return 0;
}

运行结果
局部变量运行结果0
如果在变量所在局部范围之外再调用该变量

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

运行报错,报错原因‘a’为定义,说明在超出变量所在的局部范围之外,该变量将不再能被调用。
运行报错0

  • 全局变量的作用域:整个工程
//全局变量的作用域:整个工程
int g_val = 2021;				//全局变量
int main()
{
	printf("1:%d\n", g_val);
	{
		printf("2:%d\n", g_val);
	}
	printf("3:%d\n", g_val);

	return 0;
}

运行结果,可以看出,当全局变量定义之后,不管在什么位置都可以调用。
全局变量运行结果
当然在函数体之外调用是不被允许的
运行报错1
补充:
执行性代码(包括打印、变量赋值等)必须在函数内,变量的创建可以在函数之外。

全局变量也可以在同一工程内,不同文件之间调用
不同文件间的变量调用
当然,在调用之前需要事先声明一下

//声明一下变量
extern int g_val;

如果没有声明,则不能够成功调用

2.变量的生命周期

变量的生命周期:变量的创建和销毁之间的时间段
局部变量的生命周期

//变量的生命周期

//局部变量的生命周期:进入局部范围-生命开始,出局部范围-生命结束
int main()
{
	{
		int a = 10;
		printf("%d\n",a);
	}
	//printf("%d\n",a);
	return 0;
}

运行结果,以上代码,在变量的局部范围之内可以正常打印输出,而当将输出代码写到局部范围之外时,运行报错。
全局变量的生命周期:与程序的生命周期相同。

二、常量(分类学习)

1.字面常量

字面常量我的理解是看一眼就知道不会改变的数据。

int main()
{
	//字面常量
	3.14;
	10;
	'a';
	"abcdef";

	return 0;
}

2.const修饰的常变量

int main()
{
	int num = 10;		//变量
	num = 20;
	printf("%d\n",num);
	
	return 0;
}

如上述代码中所写,num是变量,输出值为20
当变量num用const修饰之后,num的值将不能再改变。num就拥有了常量的一些性质——常属性(不能被改变)
const修饰的常变量
那么const修饰的常变量跟常量又有什么区别呢?
变量定义数组error

常变量定义数组error
从上述两段代码可以看出,无论是变量还是常变量都不可以用来定义数组,只能够用常量来定义,说明常变量与常量在使用方面还是有些区别的。

3.#define定义的标识符常量

如代码中所示,提前给MAX赋值10000,之后可以将MAX当作常量来使用。
#define定义的标识符常量
#define定义的标识符常量可以用来定义数组
#define定义的标识符常量可以用来定义数组

4.枚举常量

//枚举常量
//可以一一列举的常量

enum Sex			//性别
{
	//未来可能的取值
	MALE,			//默认初值从0开始
	//MALE = 3,      //可以赋初值
	FEMALE,
	SECRET
};

int main()
{
	enum Sex s = MALE;		//此处的赋值只能是上面定义好的值

	printf("%d\n",s);		//输出对应的初值

	return 0;
}

枚举常量
枚举常量的使用场景:性别、血型、星座等有限个取值的数据。


总结

C语言的变量和常量基本学习结束,下一篇开始字符串的学习。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值