静态变量static和extern外引⽤
静态变量--加static关键字的变量,特点:
(1)在全局数据区中分配内存,每次对其值得修改都会保留结果,直⾄程序结束。
(2)若静态变量没显⽰初始化,那会被⾃动初始化为0,并且只能初始化⼀遍。
1、全局变量:
在全局数据区中分配内存,每次值得修改都会保留结果。有全局作⽤域,并且有外部链接性,也就是不仅是所在⽂件,⼯程内的其他⽂件也可以⽤extern来使⽤同个⼯程内其他⽂件⾥⾯定义的变量。例如下⾯的例⼦:
代码1:
#include <iostream>
using namespace std;
static int a = 10;
int b = 6;
代码2:
#include <iostream>
using namespace std;
int main()
static修饰的变量{
extern int b;
cout << b << endl;
return 0;
}
代码1和2是在同⼀个⼯程的,然后对⼯程进⾏编译运⾏,得到输出结果为6:
说明在代码1定义的全局变量:int b = 6;在代码2中通过关键字extern使⽤:extern int b; 然后在代码2中就能使⽤b=6的值了。也就是extern关键字表明:此变量/函数是在别处定义的,要在此处引⽤。
2、静态全局变量:
与全局变量相⽐也具有全局作⽤域特性以及全局数据区中分配内存特性。
全局变量和全局静态变量的区别:
a)全局变量是不显式⽤static修饰的全局变量,全局变量默认是有外部链接性的,作⽤域是整个⼯程,在⼀个⽂件内定义的全局变量,在另⼀个⽂件中,通过extern 全局变量名的声明,就可以使⽤全局变量。
b)全局静态变量是显式⽤static修饰的全局变量,作⽤域是声明此变量所在的⽂件,其他的⽂件即使⽤extern声明也不能使⽤
3、静态局部变量:
使⽤价值:需要再两次函数调⽤之间对变量的值进⾏保存时。
特点:
(1)(2)继承上⾯静态变量的特点,即全局数据区分配内存+只在第⼀遍执⾏声明时进⾏初始化。(3)同时有局部变量的特点,也就是只能为所在函数所使⽤(作⽤域为局部)。
⽰例代码:
#include <iostream>
using namespace std;
static int a = 10;
int b = 6;
void p()
{
static int count = 1;
count++;
cout << "count "<<count << endl;
a++;
b++;
cout << "a "<<a <<" b "<<b<< endl;
}
int main()
{
a++;
cout << "a "<<a << endl;
p();
p();
return 0;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。