首页 > 其他分享 >全局变量,局部变量,静态变量,外部变量的区别

全局变量,局部变量,静态变量,外部变量的区别

时间:2022-10-14 23:12:56浏览次数:62  
标签:变量 静态 局部变量 外部 extern 全局变量

变量分类

 

作用域分类

局部变量(默认是自动局部变量)
1. 定义:在一个函数内部定义的变量(包括函数形参)
2. 有效范围:一直在本函数有效
3. 变量存储:栈内存,函数结束之后自动销毁
4. 静态局部变量:存储在静态存储区,作用域依旧在函数体内部。每次对其修改都会被保存下来。

 

局部变量出现在一个作用域内,它们是局限于一个函数的.局部变量经常被称为自动变量,因为它们在进入作用域时自动生成,离开作用域时自动消失.

 

全局变量 
1. 定义:在函数外部定义的变量,可为本源文件中其他函数使用
2. 有效范围:从定义变量的位置开始到本源文件的结束
3. 变量存储:存储在静态存储区域(静态内存)
4. 可被工程项目其他文件的 extern 声明之后调用(当作外部变量),对其每次修改都会进行保存
5. 静态全局变量:不能被其他源文件使用,只能本源文件使用,并且每次修改会被保存

全局变量是在所有函数体的外部定义的,程序的所有部分(甚至其他文件中的代码)都可以使用.全局变量不受作用哉的影响,总是可用的(也就是说,全局变量的生命期一直到程序的结束)

 

生存周期分类

静态存储方式——程序运行期间分配固定的存储空间的方式
动态存储方式——程序运行期间根据需要进行的动态分配空间的方式
又可分为
1. auto(自动)——默认,数据存储在动态存储
2. static(静态)——函数在调用结束之后会保存本次调用的数值
3. register(寄存器)——在声明动态局部变量或者函数形参时,可将变量声明为register,这样编译系统就会为变量分配一个寄存器而不是内存空间,通过这种方式可提升对某些局部变量频繁调用的程序的性能。(寄存器运算速度远高于内存)
4. extern (外部)——扩展全局变量的作用域

 

静态变量是指那些本不应该在程序整个生命期里存在的变量可以在程序的整个生命期里存在的变量(如局部变量),要达到这样的效果,只要在这样的变量前加上static就可以了,static变量的是在函数范围之外他是不可用的,所以它不可能被轻易地改变,这会使错误局部化,static的另一个意思是:在某个作用域外不可访问.当使用static于函数名和所有函数外部的变量时,它的意思是"在文件的外部不可以使用这个名字",函数名或变量是局部于文件的.

外部变量是指在文件a中定义了一个全局变量,在文件b中声明并使用这个全局变量时,这个全局变量对于b来说是外部变量

 

全局变量与外部变量的区别

全局变量是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。

如果外部变量不在文件的开头定义,其有效的作用范围只限于定义处到文件终了。
如果同一个源文件中,全局变量与局部变量同名,则在局部变量的作用范围内,全局变量被“屏蔽”, 即它不起作用。
如果写在文件的开头,可以省略extern。
在静态存储区分配存储空间

#include<stdio.h>
#include <process.h>
int a=5;//全局变量a,写在文件的开头,省略extern
void Print_a( )
{
int a=10;//全局变量被屏蔽
printf("%d\n",a);
}
int main(void)
{
printf("%d\n",a);
Print_a( );
system("pause");
return 0;
}

结果:
5
10

 

全局变量在整个程序中起作用,如果程序包含多个程序文件模块,可以通过外部声明,使得全局变量的作用范围扩展到其他模块,也可以通过定义静态全局变量,使其作用范围仅限制在这个模块

外部变量
全局变量只能被定义一次,如果其他模块要使用该全局变量,需要通过外部变量的声明。

外部变量声明格式: extern 变量名表;

只起说明作用,不分配存储单元,对应存储单元在全局变量定义时分配。

main.c

#include <stdio.h>

int count ;
extern void write_extern();

int main()
{
count = 5;
write_extern();
}

support.c

#include <stdio.h>

extern int count;

void write_extern(void)
{
printf("count is %d\n", count);
}

 

静态全局变量
当程序只有一个文件模块,其与一般全局变量作用相同; 当程序有多个模块时,C语言静态全局变量的作用范围局限于该模块。

标签:变量,静态,局部变量,外部,extern,全局变量
From: https://www.cnblogs.com/kuailest/p/16793287.html

相关文章

  • java的基本语法(关键字到变量)
    关键字定义:在java程序中被赋予特殊含义的英文单词特点:关键字所有的字母都为小写标识符定义:凡是可以自己起名字的地方都叫标识符规则:1可以由26个字母,0~9,-,¥组成2不能以......
  • 配置环境变量
    配置环境变量的目的:使在任意目录下都能执行java.exe这个应用程序两种方法方法一1找到jdk安装的路径,打开bin目录(因为java.exe这个程序在bin目录里面),复制当前路径 2右......
  • mysql用户变量的应用:查询所有的节点或查询所有的子节点
    用户变量:以"@"开始,形式为"@变量名"创建用户定义的变量,请使用格式@variable_name,其中variable_name包含字母数字字符。从MySQL5.7.5开始,用户定义变量的最大长度为64个字......
  • grafana Variables 变量的使用
    概念澄清Avariableisaplaceholderforavalue.#变量是值的占位符。#参考文档:https://grafana.com/docs/grafana/latest/dashboards/variables/变量的valve,可......
  • extern、关于C++的变量和类的声明和定义
    extern参考:extern声明变量详解变量的声明:intdata;//这样既声明了data同时也定义了dataexternintdata;//只声明而不定义函数的声明:voidhello();......
  • Python 为什么只需一条语句“a,b=b,a”,就能直接交换两个变量?
    从接触Python时起,我就觉得Python的元组解包(unpacking)挺有意思,非常简洁好用。最显而易见的例子就是多重赋值,即在一条语句中同时给多个变量赋值:>>>x,y=1,2>>>print(......
  • shell脚本介绍&shell脚本结构和执行&date命令用法&shell脚本中的变量
    20.1shell脚本介绍•shell是一种脚本语言 aming_linux blog.lishiming.net•可以使用逻辑判断、循环等语法•可以自定义函数•shell是系统命令的集合•shell脚本......
  • 二周第二次课(3月27日)2.10 环境变量PATH 2.11 cp命令 2.12 mv命令 2.13 文档查看ca
    2.10 环境变量PATHecho$PATH//打印当前的环境变量PATH=$PATH:路径//定义环境变量(在源环境变量的基础上增加)PATH=路径//修改环境变量which查找某个命令的绝对路径,也可以......
  • Python 变量与引用
    一、变量的引用  1、在python中,变量和引用都保存在内存中  2、在python中,函数的传递以及返回值都是靠引用传递的二、引用的概念  1、在python中,变量和数据是分......
  • csdn文章编辑变量替换
    ​作者::​​Wflynn​​场景:以前写的​​CSDN​​文章有一些固定的变量名称,现在想统一替换成其他的文本。解决方法首先编辑所需要修改文章,然后开启​​F12​​开发者工具控......