首页 > 其他分享 >static 修饰局部变量和全局变量的区别

static 修饰局部变量和全局变量的区别

时间:2024-09-17 15:23:03浏览次数:3  
标签:存储 变量 局部变量 static 修饰 全局变量

static 静态 全局 静态

用来修饰变量的

  • static 修饰全局变量,修改的是该全局变量的属性(【外部链接】变成【内部链接】)

  • static 修饰局部变量,修改的是局部变量的时候,修改的是存储位置(【栈存储区】变成【静态存储区】)

用法:

  1. 修饰局部变量

    static 修饰局部变量的时候,局部变量出了作用域,也是不销毁的,存储空间并未被释放

    *本质上,static修饰局部变量的时候,改变了变量的存储位置

    static修饰局部变量的时候,将原本应该存放在“栈存储区”的局部变量改成了“静态存储区”,使它的存储周期和全局变量的存储周期一样长。

    位置的改变,直接影响了生命周期,使这个变长了,和程序的生命周期一样长。程序结束时,空间才会被释放

    变量一旦被创建好了,是不会再次换位置的了。

    区域类型特点 / 作用
    栈区局部变量进入作用域时创建变量或对象,出去作用域就销毁变量或者对象,空间被释放
    堆区全局变量用来动态内存管理的
    静态区静态变量进入作用域创建,出去作用域也不销毁,直到程序结束内存空间才会被释放 - eg:static+局部变量

    .h 头文件 ( 函数的声明, 类型的声明, 头文件的包含 )

    .c 源文件 ( 函数实现 )

  2. 修饰全局变量

    static 修饰全局变量的时候,并为对其作用域进行修改,而是改变了其属性,即将原来的外部链接属性改为内部链接属性。

    在函数内定义的变量是局部变量,而在函数之外定义的变量则称为外部变量,外部变量也就是我们所讲的全局变量。 (外部变量、全局变量)的存储方式为静态存储,其生存周期为整个程序的生存周期。

    全局变量可以为本文件中的其他函数所共用,它的有效范围为从定义变量的位置开始到本源文件结束。

    全局变量是在整个工程内都可以使用,在 a.c 中定义的也可在 b.c 中通过exert来使用 a.c 中的全局变量(不用exert也可以)

    总结:

    • static 修饰全局变量:将【外部链接】属性修改成【内部链接】属性 - (a 文件中被 static 修饰的全局变量就没法被 b 文件访问了)

    • static 修饰局部变量:存储位置由【栈存储区】修改成【静态存储区】 - (被 static 修饰的局部变量在大括号结束的时候不会被释放空间,但是括号外也无法访问该局部变量, 等到下一次进入该大括号内时,依然可以继续上次的值)

标签:存储,变量,局部变量,static,修饰,全局变量
From: https://blog.csdn.net/m0_60605989/article/details/142314978

相关文章

  • C++ 定义静态成员 static 关键字不能在定义出重复出现
    定义静态成员和其他的成员函数一样,我们既可以在类的内部也可以在类的外部定义静态成员函数。当在类的外部定义静态成员时,不能重复static关键字,该关键字只出现在类内部的声明语句:voidAccount::rate(doublenewRate){interestRate=newRate;}Note:和类的所有成员一样,当我......
  • C++:初始化列表、友元、static
    目录一、初始化列表​二、static成员三、友元函数一、初始化列表•之前我们实现构造函数时,初始化成员变量主要使用函数体内赋值,构造函数初始化还有一种方 式,就是初始化列表,初始化列表的使用方式是以⼀个冒号开始,接着是⼀个以逗号分隔的数据成员列表,每个"成员变量"后......
  • Java入门:08.Java中的static关键字01
    1static关键字可以修饰属性变量,方法和代码段static修饰的属性称为静态属性或类属性,在类加载时就在方法区为属性开辟存储空间,无论创建多少个对象,静态属性在内存中只有一份。可以使用类名.静态属性的方式引用static修饰的方法称为静态方法或类方法,在类加载时就在方法......
  • Java入门:08.Java中的static关键字02(拓展:单例模式)
    1.3对象代码段和静态代码段什么是代码段?就是个{}里面包含一堆代码代码段可以写在方法中,也可以写在方法外代码段可以方法中和方法外独立存在,也可以配合着分支结构和循环结构存在classA{ {   ..... }  publicvoidt1(){   { ......
  • static和final有什么区别
    1.是什么    static 和 final 是Java中两个非常重要的关键字,它们各自有着独特的用途和含义,但也可以在某些情况下一起使用。下面我将详细解释这两个关键字的区别,并通过例子来加深理解。static关键字  static 关键字用于声明属于类本身而不是类的某个特定对象的......
  • Python 全局变量使用指南
    Python中优雅使用全局变量的指南在Python编程中,全局变量的使用和管理是非常重要的,尤其是在需要共享配置信息、常量或需要在多个模块之间共享数据时。相比其他语言,Python通过模块级别变量、数据类、环境变量等方式为我们提供了多种实现全局变量的途径。以下将详细介绍几......
  • java如何定义一个全局变量(内存中)
    前言java如何定义一个全局变量(内存中),项目启动时,通过读取配置文件来构建一个实体类对象,然后在之后可以直接使用,而不是每次使用都要进行构建前置准备实体类结构packagecn.daenx.demo;importlombok.Data;@DatapublicclassPerson{privateStringinfo;}配置文件......
  • [Java面向对象]static方法
    static方法不能重写在Java中,静态方法不能被重写。静态方法属于类本身,而不是类的实例。因此,当你在子类中定义一个与父类静态方法同名的方法时,这不是重写,而是隐藏。publicclassclassA{publicstaticvoidmethod(){System.out.println("classA的静态方法");......
  • C++--static成员和友元
    1static声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;用static修饰的成员函数,称之为静态成员函数。静态成员变量一定要在类外进行初始化静态定义的成员变量在类外定义,变量类型类名::变量名=value的形式。此外,static还可以在类里面定义......
  • static
    概述static表示静态的意思,是Java的一个修饰符,可以修饰成员方法或者成员变量。被static修饰的成员变量叫做静态变量,被static修饰的成员方法叫做静态方法(staticmethod)静态变量被该类的所有对象共享,所有对象的这个变量都是同一个值,在一处修改了,对所有的对象都有效果。静......