美文网首页C++
全局变量

全局变量

作者: 越天高 | 来源:发表于2019-02-18 19:07 被阅读3次

局部变量

概念: 局部变量就是定义在函数, 代码块和函数形参列表中的变量, 我们就称之为局部变量
作用范围: 从定义的那一行开始一直直到遇到大括号结束或者遇到return为止
特点:
相同作用域范围内不能出现同名的局部变量
不同作用域范围内出现同名的局部变量, 内部的局部变量会覆盖外部的局部变量
注意:
局部变量没有固定的初始化值, 如果没有对局部变量进行初始化, 那么局部变量中是一些随机的值, 所以在开发中千万不要使用未初始化的局部变量
存储位置:
局部变量存储在栈中, 当作用域结束系统会自动释放栈中的局部变量

全局变量

概念: 写在函数,代码块,形参列表外的变量, 我们就称之为全局变量
作用范围: 从定义的那一行开始一直直到文件末尾(暂时这样认为)
特点:
全局变量和局部变量可以同名
如果存在和全局变量同名的局部变量, 那么局部变量会覆盖全局变量
注意:
全局变量如果没有进行初始化, 那么系统默认会将全局变量初始化为0
存储位置:
全局变量存储在静态区中, 他会随着程序的启动而创建, 随着程序的结束而结束

内部的全局变量和外部的全局变量

全局变量分为两种:
1.外部全局变量, 默认情况下所有的全局变量都是外部全局变量
什么事外部全局变量? 可以被其它文件访问的全局变量我们称之为外部全局变量
2.内部全局变量, 只要给全局变量加上static关键字就是内部全局变量
什么是内部全局变量? 只能被当前文件访问的全局变量我们称之为内部全局变量

外部全局变量有一个特点:
可以定义同名的外部全局变量
多个同名的外部全局变量指向同一块存储空间

内部全局变量有一个特点
也可以定义多个同名的内部全局变量
多个同名的全局变量如果不在同一个文件中, 那么指向不同的存储空间

为了提高数据的安全性, 不让别人在其它文件中修改我们的全局变量, C语言提供了另外一个用于修改全局变量的关键字, static
只要用static修改的全局变量就是内部全局变量, 只能在当前文件中使用
这样就可以提高我们全局变量的安全性

如果多个文件中存在同名的内部全局变量, 相互不会影响
如果既有外部全局变量也有内部全局变量, 那么会优先访问内部全局变量

extern:
用于声明一个外部全局变量
声明只需要在使用变量之前声明就可以了
static:
用于定义一个内部全局变量
声明和定义的区别:
声明不会开辟存储空间
定义会开辟存储空间

//int num; // 外部全局变量

static int num; // 内部全局变量 998

// 由于Xcode升级之后导致的, 在Xcode6以前是可以的
/*如果直接在zs.c当中定义外部全局变量num, 那么我们说过同名的外部全局变量指向同一块存储空间,
那么如果在多个文件中有同名的外部全局变量, 可能导致A文件的数据被B文件不小心修改了
降低了数据的封装性, 提高了发生错误的概率
// extern关键字用来修饰全局变量, 代表声明一个全局变量
// 注意: 声明全局变量和声明函数一样, 仅仅是告诉系统我们有这个全局变量, 但并不会真在的开辟存储空间
*/

//extern int num;

//static int num; // 0  666

//int num; // 0 666

static对局部变量的作用

// 当使用static来修饰局部变量, 那么会延长局部变量的生命周期, 并且会更改局部变量存储的位置 , 将局部变量从栈转移到静态区中
// 只要使用static修改局部变量之后, 当执行到定义局部变量的代码就会分配存储空间, 但是只有程序结束才会释放该存储空间

应用场景":
当某个方法的调用频率非常高, 而该方法中更有些变量的值是固定不变的
那么这个时候就可以使用static来修饰该变量, 让该变量只开辟一次存储空间
这样可以提高程序的效率和性能

{
    int a = 0; // 局部变量
  
    static int b = 0;
    a++; // 1
    b++; // 1  2
    printf("a = %i\n", a); // 1
    printf("b = %i\n", b); // 1
    printf("------------\n");
}


void demo(int r)
{
    /*
   
     */
    static double pi = 3.1415926; // 固定
    double res = pi * r * r;
    printf("res = %lf\n", res);
}

相关文章

  • Objective-C中static、const和extern关

    一 static 1,修饰全局变量 在全局变量前加static,全局变量就被定义成为一个静态全局变量(全局变量和静...

  • python函数

    函数 全局变量 获取全局变量python获取全局变量直接获取 修改全局变量python不允许直接修改全局变量如果要...

  • 【C语言笔记】<二十一>内部全局变量和外部全局变量

    全局变量分为两种: 1.外部全局变量, 默认情况下所有的全局变量都是外部全局变量什么事外部全局变量? 可以被其它文...

  • 1、static const 全局变量 单利为什么用stati

    1)static,extern修饰全局变量 static修饰的全局变量只能在当前文件中使用 全局变量和静态全局变量...

  • 全局变量

    客户端全局变量 bool GlobalVariableCheck( string 全局变量名 ) 检查全局变量存...

  • C/C++知识点分享(16)

    1、statac全局变量、局部变量、函数与普通全局变量、局部变量、函数,static全局变量与普通的全局变量有什么...

  • C/C++ 中 static 的用法

    C语言: 1、静态全局变量:1、在全局变量前加上 static 关键字,即为静态全局变量2、静态全局变量在程序的数...

  • php预定义超全局变量、超全局数组

    一、超全局变量:除了有全局变量的特点外,可以无须声明,直接使用。全局变量: 超全局变量: 二、php提供了九种超全...

  • 变量、函数、存储过程

    一、变量 1.1全局变量 mysql全局变量,全局变量影响服务器整体操作,当服务启动时,它将所有全局变量初始化为默...

  • 原型、原型链、实现继承

    一、全局变量 window是全局变量(浏览器的叫法),EMCAScript规定全局变量是global。window...

网友评论

    本文标题:全局变量

    本文链接:https://www.haomeiwen.com/subject/bseusqtx.html