静态变量--加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()
{
	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;
}

静态变量static和extern外引用的更多相关文章

  1. 静态变量(static)的特点

    静态变量(static):有局部变量,也有全局变量. 静态局部变量:在函数体内用static说明的变量称为静态局部变量,属于静态类别. 特点: (1)它占据一个永久性的存储单元.随着文件的存在而存在. ...

  2. java中的静态变量---static

    用static修饰符修饰的数据成员,并不是属于那个对象的,而是属于类.静态数据成员在定义的时候已经分配了内存,而此时对象还没有建立好. 当然它也是被保存到类的方法中的,而不是对象内存中,大家都是可以访 ...

  3. android中少用静态变量(android静态变量static生命周期)

    在android中,要少用静态变量. 我现在做的一个应用中,之前的开发人员使用静态变量来存储cookie,这个全局的静态变量用来验证身份. 这时客户反应,应用长时间不使用,再次使用,会提示身份过期. ...

  4. 静态变量static

    1.在我们平时些程序中我们经常需要一些变量的他们能纪录我们所需要的值,但是平常的int类型达不到这样的目的,所以呢就有了static的基态变量,静态变量就像  B/S中的session,cookio等 ...

  5. swift -- 静态变量static

    import UIKit class ViewController: UIViewController {     //静态变量  swift中的static静态变量,只能在这里声明,不能在方法中声明 ...

  6. Java中的静态变量static

    package com.wangcf; public class Test { String name="你好"; static String sex="男"; ...

  7. php静态变量static

    静态变量 function test() { static $a = 0; echo $a; $a++; } test(); test(); test();

  8. C#中为什么不能再方法里定义静态变量(Static)

    c#的静态变量是在对象生成的时候分配内存空间的,而不是函数执行的时候. 如果在函数里定义,那么这个变量就需要在函数执行的时候分配内存空间,这是C#不允许的,至于为什么不允许,个是因为垃圾回收机制的问题 ...

  9. SpringBoot项目给静态变量static注入@Value

    @value不能直接注入值给静态属性,spring 不允许/不支持把值注入到静态变量中:spring支持set方法注入,我们可以利用非静态setter 方法注入静态变量 @Component publ ...

随机推荐

  1. python——创建django项目全攻略(野生程序员到家养程序员的完美进化)

    新建工程 我用pycharm写代码,所以一般就用pycharm创建django工程.右上角File-New Project.选择路径,修改项目名称,确定.就可以创建一个新的django工程.     ...

  2. css学习笔记 4

    伪类可以用来指定一个或多个与其相关的选择符的状态,如a:link a:active a:hover a:visited :ie7及以下不支持. 注意:上面与超链接相关的伪类的顺序必须是:LVHA. 伪 ...

  3. JavaWeb基础: Cookie

    Cookie相关类: javax.servlet.http.Cookie 用于创建Cookie response 里通过addCookie方法添加Cookie到响应头 request里通过getCoo ...

  4. Mat转换为QImage

    请留意: opencv为3.0.0版本,Qt为4.8.4版本 #include"image1.h" #include<QApplication> #include< ...

  5. SQL SERVER 2005 DBCC PAGE命令说明

    夏日福利: 小泽玛利亚的“专业摄影”性感写真集:http://947kan.com/video/player-52475-0-0.html ------------------------------ ...

  6. Asp.net MVC3表格共用分页功能

    在建立的mvc3项目中,在Razor(CSHTML)视图引擎下,数据会在表格中自动的生成,但分页没有好的控件实现,这里我们开发了设计了一个分页的模板,适合于没有数据提交和有数据提交的分页的分页. 第一 ...

  7. [原创]导出CSV文件,特殊字符处理。

    CSV文件格式 1.CSV文件默认以英文逗号(,)做为列分隔符,换行符(\n)作为行分隔符.2.CSV默认认为由""括起来的内容是一个栏位,这时不管栏位内容里有除"之外字 ...

  8. [转]搭建高可用mongodb集群(四)—— 分片

    按照上一节中<搭建高可用mongodb集群(三)—— 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...

  9. nmon--非常棒的LINUX/AIX性能计数器监测和分析工具

    转自51Testinghttp://bbs.51testing.com/viewthread.php?tid=116526 经常看到很多人讨论说loadrunner对linux/aix的性能监测太少, ...

  10. TortoiseGit流程安装使用手册

    end if