C语言 变量与常量

目录

1.变量

1)全局变量与局部变量生命周期上的差别

2)通过关键字static修饰,来改变局部变量的生命周期

3)static修饰全局变量

4)全局变量和局部变量同名时的优先级 

 2.常量

1)通过const对变量进行修饰,让其变成常量

2)字面常量

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

4)枚举常量


1.变量

变量分为全局变量和局部变量,但是写代码的时候尽量使用局部变量。


1)全局变量与局部变量生命周期上的差别

全局变量的生命周期是整个程序的生命周期,而局部变量的生命周期则是进入作用域,生命周期开始,出了作用域,生命周期结束。


2)通过关键字static修饰,来改变局部变量的生命周期

因为局部变量的生命周期极其有限,我们可以通过关键字static来改变局部变量的生命周期,让局部变量不会因为出了作用域,该局部变量的生命周期就结束,而是到程序结束以后,该局部变量的生命周期才会结束。

例:

#include <stdio.h>

void fun() {
	int i = 0;
	i++;
	printf("i = %d\n", i);
}
void main() 
{
	for (int i = 0; i < 10; i++) {
		fun();
	}
}

而这个执行结果为

而通过static修饰i以后

#include <stdio.h>

void fun() {
	static int i = 0;//具有记忆性
	i++;
	printf("i = %d\n", i);
}
void main() 
{
	for (int i = 0; i < 10; i++) {
		fun();
	}
}

修饰后结果为

上述情况是因为,在局部变量i没有被static修饰的时候,每一次循环都是在重新申请一个空间,将这个空间命名为i,然后在函数fun结束以后,此时所定义的空间将被释放,当遇到下一循环的时候,则重复上面的动作。

而,通过static定义后的局部变量,他在第一次循环,执行函数fun的时候,申请的一个空间i,该空间的生命周期遭到改变,使他不会因为fun函数结束后,空间被释放掉,当下一次循环执行fun函数的时候,也是对原本的空间的值进行改变。也就是,申请一个空间i这个动作在此时,只是执行了一次。


3)static修饰全局变量

当任务出现多个文件的时候

例:

一个源文件里有全局变量a

int a = 100;

另一个源文件想要引用a的话,要在该文件内对该全局变量进行申明

extern int a;//对别的文件中的全局变量进行申明
void main()
{
printf("a = %d",a);
}

如果在全局变量a所在的源文件中,用static进行修饰,则即使另一个源文件通过申明,也无法使用a。

static int a = 100;

如图

一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用, 不能在其他源文件内使用。 


4)全局变量和局部变量同名时的优先级 

如果全局变量,与局部变量同名的时候,则会就近,局部变量的优先级是高于全局变量的。

例:

在这串代码中,其中,a则为全局变量,b则为在主函数中有效的局部变量。当在代码中重新定义一个与a同名的局部变量的时候,则此局部变量的优先级是高于全局变量的。

#include <stdio.h>

int a = 20;
void main()
{
	int a = 10;
	int b = 30;
	printf("%d", a);
}

而这个的执行结果为


 2.常量

1)通过const对变量进行修饰,让其变成常量

例:

#include <stdio.h>

void main()
{
	int a = 10;
	const int b = 30;//const将变量修饰为常量
	a = 20;
	b = 30;
	printf("%d", a);
}

当我们用const将b修饰为一个常量的时候,我们再通过b = 30语句则无法修改b的值,而编译软件对于此也会出现报错。

 这个时候,b则变为一个不可被修改的常量。


2)字面常量

例:

#include <stdio.h>

void main()
{
	int a = 10;
	const int b = 30;
	10;//字面常量
}

在这段代码中,10就是作为一个字面常量出现的。


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

例:

#define MAX 100//define定义的标识符常量

4)枚举常量

例:

enum Sex
{
 MALE,
 FEMALE,
 SECRET
};
//括号中的MALE,FEMALE,SECRET是枚举常量

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值