C 语言中的静态变量和全局变量有何区别?

🍅关注博主🎗️ 带你畅游技术世界,不错过每一次成长机会!
📙C 语言百万年薪修炼课程 通俗易懂,深入浅出,匠心打磨,死磕细节,6年迭代,看过的人都说好。

分割线

分割线


C 语言中的静态变量和全局变量的区别

在 C 语言中,静态变量(Static Variables)和全局变量(Global Variables)是两种具有不同特性和用途的变量类型。理解它们之间的区别对于编写高效、可靠和可维护的 C 程序至关重要。

分割线

一、存储位置

  1. 全局变量
    全局变量存储在静态存储区,程序在编译时就为其分配了存储空间,并且在程序的整个运行期间都存在。
  2. 静态变量
    静态变量也存储在静态存储区,同样在编译时分配存储空间。

分割线

二、作用域

  1. 全局变量
    全局变量的作用域是从其定义的位置开始,到整个源文件结束。在其他源文件中,如果要使用全局变量,需要使用 extern 关键字进行声明。
  2. 静态变量
    • 静态局部变量:其作用域仅限于定义它的函数内部。但与普通的局部变量不同,静态局部变量在函数调用结束后不会被销毁,其值会被保留,下次函数调用时可以继续使用。
    • 静态全局变量:其作用域仅限于定义它的源文件内部,在其他源文件中不可见。

分割线

三、生命周期

  1. 全局变量
    全局变量的生命周期与整个程序的运行周期相同,从程序开始执行到程序结束。
  2. 静态变量
    静态变量的生命周期也与整个程序的运行周期相同,无论是静态局部变量还是静态全局变量。

分割线

四、初始化

  1. 全局变量
    全局变量如果没有进行显式的初始化,系统会将其初始化为 0 (对于数值型变量)、NULL (对于指针变量)或者空字符 '\0' (对于字符型变量)。
  2. 静态变量
    • 静态局部变量:如果没有进行显式的初始化,系统会将其初始化为 0 (对于数值型变量)、NULL (对于指针变量)或者空字符 '\0' (对于字符型变量)。
    • 静态全局变量:与全局变量相同,如果没有显式初始化&#
静态全局变量(也称为静态外部变量)与普通全局变量(也称为动态全局变量或外部变量)有以下主要区别: 1. **存储生命周期**: - 普通全局变量: 它们在整个程序的执行过程中都存在,即使在函数中定义也会一直保存其值,直到程序结束。 - 静态全局变量: 当它们首次被初始化后,其值会在下次程序运行时保持不变,除非显式地重新赋值。当函数退出时,它们并不会从内存中删除。 2. **作用域**: - 普通全局变量: 只能在定义它的源文件范围内访问。 - 静态全局变量: 具有与普通全局变量相同的文件范围,但若在同一文件中有多个同名的静态变量,每个函数的作用域内只有一个副本(即静态局部化),其他函数无法访问。 3. **初始化**: - 普通全局变量: 如果未初始化,通常会得到不确定的默认值。 - 静态全局变量: 必须进行初始化,否则会导致未定义的行为。 4. **内存分配**: - 普通全局变量: 在程序开始时创建并加载到数据段。 - 静态全局变量: 创建时机可能晚于普通全局变量,具体取决于编译器实现,但它们的内存分配是在程序开始或首次使用时完成。 5. **多次调用中的状态**: - 普通全局变量: 对同一名称的全局变量,在每次函数调用中都是一样的,因为没有局部副本。 - 静态全局变量: 在每次函数调用之间保持独立的状态,不会因重复调用而共享同一副本。 6. **内存释放**: - 普通全局变量: 不需要程序员手动释放内存。 - 静态全局变量: 由编译器管理,一般在程序退出时自动释放。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值