当前位置:首页 » 《关于电脑》 » 正文

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

2 人参与  2024年10月30日 14:00  分类 : 《关于电脑》  评论

点击全文阅读


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

分割线

文章目录

C 语言中的静态变量和全局变量的区别一、存储位置二、作用域三、生命周期四、初始化五、应用场景全局变量的应用场景静态变量的应用场景 六、注意事项对于全局变量对于静态变量

分割线


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

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

分割线

一、存储位置

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

分割线

二、作用域

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

分割线

三、生命周期

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

分割线

四、初始化

全局变量
全局变量如果没有进行显式的初始化,系统会将其初始化为 0 (对于数值型变量)、NULL (对于指针变量)或者空字符 '\0' (对于字符型变量)。静态变量 静态局部变量:如果没有进行显式的初始化,系统会将其初始化为 0 (对于数值型变量)、NULL (对于指针变量)或者空字符 '\0' (对于字符型变量)。静态全局变量:与全局变量相同,如果没有显式初始化,会被初始化为 0 等默认值。

下面通过具体的示例来进一步说明静态变量和全局变量的区别:

// 示例 1:全局变量#include <stdio.h>int globalVar = 10;  // 全局变量void function1() {    printf("In function1, globalVar = %d\n", globalVar);    globalVar++;}void function2() {    printf("In function2, globalVar = %d\n", globalVar);}int main() {    function1();    function2();    return 0;}

在上述示例中,globalVar 是一个全局变量,在 function1 中对其进行修改后,在 function2 中可以看到修改后的结果。

// 示例 2:静态局部变量#include <stdio.h>void function() {    static int staticLocalVar = 5;  // 静态局部变量    printf("Static local variable: %d\n", staticLocalVar);    staticLocalVar++;}int main() {    function();    function();    function();    return 0;}

在这个示例中,staticLocalVar 是一个静态局部变量。每次调用 function 函数时,staticLocalVar 的值都会在上一次调用结束后的基础上增加,而不是每次都重新初始化。

// 示例 3:静态全局变量#include <stdio.h>static int staticGlobalVar = 20;  // 静态全局变量void function3() {    printf("In function3, staticGlobalVar = %d\n", staticGlobalVar);}int main() {    // 在此处无法直接访问 staticGlobalVar,因为它是静态全局变量,作用域仅限于定义它的源文件    function3();    return 0;}

在这个示例中,staticGlobalVar 是一个静态全局变量,只能在定义它的源文件中被访问和使用。

分割线

五、应用场景

全局变量的应用场景

在多个函数之间需要共享数据,并且这些数据在整个程序的运行期间都需要保持有效。配置信息或常量,这些值在程序的不同部分都可能被使用,并且在程序运行期间不会改变。

静态变量的应用场景

静态局部变量常用于函数内部需要记住上一次调用的状态或结果的情况。静态全局变量常用于在一个源文件内部隐藏某些变量,使其不被其他源文件访问,以提高代码的封装性和模块性。

分割线

六、注意事项

对于全局变量

过多地使用全局变量可能会导致命名冲突和代码的可维护性降低。因为全局变量在整个程序中都是可见的,不同的模块可能无意中修改了同一个全局变量,从而导致难以调试的错误。全局变量可能会破坏函数的独立性和封装性,使得函数的行为更加依赖于外部的环境。

对于静态变量

静态局部变量的使用要谨慎,因为其值会在函数调用之间保留,如果不小心处理,可能会导致意外的结果。静态全局变量虽然可以提高模块的封装性,但过度使用可能会导致代码的可复用性降低。

静态变量和全局变量在存储位置、作用域、生命周期、初始化等方面都存在着区别。在实际编程中,应根据具体的需求合理选择使用,以提高程序的性能、可读性和可维护性。


分割线

?相关推荐

?C 语言百万年薪修炼课程 通俗易懂,深入浅出,匠心打磨,死磕细节,6年迭代,看过的人都说好。?博客首页-关注博主?️ 带你畅游技术世界,不错过每一次成长机会!?CSDN专栏-C语言修炼?技术社区-墨松科技

C语言




点击全文阅读


本文链接:http://m.zhangshiyu.com/post/179983.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 逼我下乡?我闪婚嫁军官带娃暴富苏冉冉刘翠芬周牧深完本_逼我下乡?我闪婚嫁军官带娃暴富(苏冉冉刘翠芬周牧深)
  • 童养夫为了白月光想虐我?没关系我还有九个(崔清乐顾北寒)_童养夫为了白月光想虐我?没关系我还有九个(崔清乐顾北寒)
  • 代管班费小荷包三年后,青梅说我吞了180万(乔宇宁雨)全书免费_(乔宇宁雨)代管班费小荷包三年后,青梅说我吞了180万后续(乔宇宁雨)
  • 男友一家要我守规矩后,却悔疯了苏然完本_男友一家要我守规矩后,却悔疯了(苏然)
  • 重生打脸渣男毒闺蜜(陈亮张倩)全书免费_(陈亮张倩)重生打脸渣男毒闺蜜后续(陈亮张倩)
  • 全文和宗门断情绝义后,小可怜被大佬团宠了创作编写(江寻柳青青)列表_全文和宗门断情绝义后,小可怜被大佬团宠了创作编写
  • 和宗门断情绝义后,小可怜被大佬团宠了创作编写江寻柳青青完本_和宗门断情绝义后,小可怜被大佬团宠了创作编写(江寻柳青青)
  • 向导坐牢后,结果把狱友驯成忠犬桑虞陆擢完本_向导坐牢后,结果把狱友驯成忠犬(桑虞陆擢)
  • 姑姑爱开玩笑,藏我的录取通知书夏知妤_姑姑爱开玩笑,藏我的录取通知书夏知妤
  • 我嫁给了我不喜欢的公子(慕朝林又),我嫁给了我不喜欢的公子
  • 当男主领养了东北幼崽后(沈星眠周景行)全书免费_(沈星眠周景行)当男主领养了东北幼崽后后续(沈星眠周景行)
  • 好看的老公和我资助的女大登记夫妻开房简冰巧周临川_老公和我资助的女大登记夫妻开房简冰巧周临川

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1