C语言学习—变量总结

变量总结

变量包含:普通全局变量,静态全局变量,普通局部变量,静态局部变量等;

前言

在C语言中,变量是一个有名字的,具有具体属性的一个存储单元。你可以将变量直接就理解为内存。本文对C语言中使用的各种变量进行一个总结,方便大家学习使用。

一、局部变量

局部变量分为:静态局部变量、全局局部变量

1.静态局部变量

在介绍静态局部变量之前,我们先了解一个概念:静态,在C语言中我们使用关键字static来表示静态,当我们在定义变量时,一般的说在函数内部定义的变量我们称之为局部变量,在定义时对其前面加上关键字static,则此局部变量就是静态局部变量,我们举个简单的例子:

void Func()
{
	static int n;  //定义一个整形变量的静态局部变量n。
}

按照其字面意思,就是它的作用域只对局部有用,所以一般的说静态局部变量的作用域就是函数内部,只是在某一个块中发挥作用,而静态局部变量的生命周期是:函数进入时创建,程序退出时消亡,这里就涉及到计算机为其分配的内存区域。
当我们创建一个项目时,计算机会将欲分配的内存区域大致分为4个区域:第一个是代码区(段),第二个是全局(静态)变量区,第三个是栈,第四个是堆。而我们所定义的各种变量会按照其属性分别存放在不同的区域。就比如说,静态局部变量会存放在全局(静态)变量区,而普通局部变量会存放在内。

2.普通局部变量

对于普通局部变量,就是我们一般的在函数体内或者在主函数main()内部定义的变量,其作用域和静态局部变量是一样的,都只作用于某一个块内,或者说某一个函数体内。它的生命周期是:函数进入时创建,函数退出时消亡,举个简单的例子:

void Func()
{
	int n;  //定义一个整形变量的普通局部变量n。
}

【注】对于普通局部变量和静态局部变量来说,没有链接属性这个概念,是因为局部变量只是在函数体内作用,并不能将其通过链接扩大其作用域。

总结:对于局部变量,通俗点说就是定义在函数内部的变量,其作用域只是函数内部,退出函数体就失去其作用,若在对其进行调用程序会出错,例如:

int Sumc(int a, int b)
{
	int sum;  //定义一个整形变量的局部变量sum
	sum = a + b;  //变量a,b,sum均为局部变量,只在函数Sumc中发挥作用
	return sum;  //返回两个整数a,b的和
}
int main()
{
	int n;  //定义一个整形变量的局部变量n,只在主函数main()中发挥作用
}

如下代码,在函数体Func中定义一个局部变量sum,我们想要在主函数main中使用sum,编译器此时会报错:未定义标识符"sum"。
在这里插入图片描述

二、全局变量

全局变量分为:普通全局变量,静态全局变量

1.普通全局变量

全局变量,通俗的理解,就是其在全局也即整个文件中发挥作用,从其作用域理解,它在定义的时候,就必须定义在函数体外部,或者主函数的外部,对于普通的全局变量,它的生命周期是在程序运行时创建,在程序退出时消亡。

【注】对于全局变量,不论是普通全局变量,还是静态全局变量,其内存区域均在全局(静态)变量区

2.静态全局变量

类似于静态局部变量的定义,在定义全局变量的时候在其前面加上关键字static,即为静态全局变量。对于静态全局变量,它的作用域是整个文件,生命周期是程序运行时创建,程序退出时消亡,它存储在全局(静态)变量区,举个简单的例子:

static int n = 0; //定义一个静态全局变量n,并且初始化为0,其作用域是整个文件,也就是对函数Func和main均可用
int m = 0; //定义一个普通全局变量m,并且初始化为0,其作用域是整个文件
void Func()
{
	int n;  //定义一个整形变量的普通局部变量n,其作用域是函数Func()内部
}
int main()
{
	char str;  //定义一个char类型的普通局部变量str,其作用域是主函数main()内部
}

如下代码,我们在函数体外定义一个全局变量sum,此时,可以在函数Func中使用,也可以在主函数main中使用。

在这里插入图片描述

三、全局变量和局部变量的比较

1.比较
生命周期作用域默认值内存区域链接属性
普通局部变量函数进入时创建,函数退出时消亡函数内随机值
静态局部变量函数进入时创建,程序退出时消亡函数内0全局(静态)变量区
普通全局变量程序运行时创建,程序退出时消亡整个文件内0全局(静态)变量区外部
静态全局变量程序运行时创建,程序退出时消亡整个文件内0全局(静态)变量区内部
2.静态关键字:static

static 是 C/C++ 中很常用的修饰符,它被用来控制变量的存储方式和可见性。在C语言中,关键字static主要定义全局静态变量、定义局部静态变量、定义静态函数。
static可以修改变量或者函数的声明周期,默认值,内存区域,链接属性。

举个简单的例子:

int a;   //普通全局变量  程序创建时生成,程序退出时消亡  全局(静态)变量区  整个文件内  外部  默认值:0
static int b;  //静态全局变量  程序创建时生成,程序退出时消亡  全局(静态)变量区  整个文件内  内部(加extern变为外部)  默认值:0
const int c = 10;   //全局变量(默认为静态) 内部  程序创建时生成,程序退出时消亡  
int main()
{
	int d;  //普通局部变量  函数(代码块)创建时生成,函数退出时消亡   函数内   栈内   默认值:随机值
	static int e;  //静态局部变量  函数创建时生成,程序退出时消亡   函数内    全局(静态)变量区       
	const int f = 20;  //局部变量  函数创建时生成,函数退出时消亡   函数内 
	for (int i = 0; i < 10; i++)  //i是局部变量  块创建时生成,块结束时消亡  块内可见
	{
		printf("%d\n", i);  
	}
	return 0;
}

总结

以上就是今天要讲的内容,仅仅简单介绍了局部变量和全局变量之间的区别,以及静态关键字static的使用,要注意一点的就是,利用static定义的变量,比如定义静态局部变量,static只是将局部变量的生命周期拉长,但是对其可以修改。
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值