Qt添加全局变量

在C/C++中, 局部变量按照存储形式可分为三种auto, static,register


1.局部变量的默认类型都是auto,从栈中分配内存。
   auto的含义是由程序自动控制变量的生存周期,通常指的就是变量在进入其   作用域的时候被分配,离开其作用域的时候被释放


2.而static变量,不管是局部还是全局,都存放在静态存储区
    变量在程序初始化时被分配,直到程序退出前才被释放;
    也就是说static在执行main函数前已经被初始化。也就是在程序初始化时    被分配。
*********************************************************************
堆:由程序员自己分配释放(用malloc和free,或new和delete),    如果我们不手动释放,那就要到程序结束才释放。
栈:由编译器自动分配释放,其中存放在主调函数中被调函数的下一句代码、函数参数和局部变量,容量有限,较小
静态存储区:由在编译时由编译器分配,由系统释放,其中存放的是全局变量、static变量和常量.
区别:
1)   堆是由低地址向高地址扩展,栈是由高地址向低地址扩展。
2)   堆是不连续的空间,栈是连续的空间。
3)   在申请空间后,栈的分配要比堆的快。对于堆,先遍历存放空闲存储地址的链表、修改链表、再进行分配;对于栈,只要剩下的可用空间足够,就可分配到,如果不够,那么就会报告栈溢出。
4)   栈的生命期最短,到函数调用结束时;静态存储区的生命期最长,到程序结束时;堆中的生命期是到被我们手动释放时(如果整个过程中都不手动释放,那就到程序结束时)。






********************************************************************
限制作用域
这一点相对于普通全局变量和static全局变量来说的。
对于全局变量而言,不论是普通全局 变量还是static全局变量,其存储区都是静态存储区,因此在内存分配上没有什么区别。
区 别在于:
         1.普通的全局变量和函数,其作用域为整个程序或项目.
外部文件(其它cpp文件)可以通过extern关键字访问该变量和函数。一般不提倡这种用法,如果要在多个cpp文件间共享数据,应该将数据声明为extern类型。
     
        在头文件里声明为extern:
extern int g_value;     // 注意,不要初始化值!
然后在其中任何一个包含该头文件的cpp中初始化(一次)就好:
int g_value = 0;     // 初始化一样不要extern修饰,因为extern也是声明性关键字;
然后所有包含该头文件的cpp文件都可以用g_value这个名字访问相同的一个变量;


2. static全局变量和函数,其作用域为当前cpp文件,其它的cpp文件不能访问该变量和函数。如果有两个cpp文件声明了同名的全局静态变量,那么他们实际上是独立的两个变量。
 
static函数的好处是不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。
3.头文件中的static变量
如果在一个头文件中声明:


       4.static int g_vaule = 0;
      那么会为每个包含该头文件的cpp都创建一个全局变量,但他们都是独立的;所以也不建议这样的写法,一样不明确需要怎样使用这个变量,因为只是创建了一组同名而不同作用域的变量。


5.static数据成员的初始化:
(1) 初始化在类体外进行,而前面不加static,以免与一般静态变量或对象相混淆。
(2) 初始化时不加该成员的访问权限控制符private,public等。
(3) 初始化时使用作用域运算符来标明它所属类,因此,静态数据成员是类的成员,而不是对象的成员。
(4) 静态数据成员是静态存储的,它是静态生存期,必须对它进行初始化。


6.Static成员函数
静态成员函数和静态数据成员一样,它们都属于类的静态成员,它们都不是对象成员。因此,对静态成员的引用不需要用对象名。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值