静态变量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()
{
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外引用的更多相关文章
- 静态变量(static)的特点
静态变量(static):有局部变量,也有全局变量. 静态局部变量:在函数体内用static说明的变量称为静态局部变量,属于静态类别. 特点: (1)它占据一个永久性的存储单元.随着文件的存在而存在. ...
- java中的静态变量---static
用static修饰符修饰的数据成员,并不是属于那个对象的,而是属于类.静态数据成员在定义的时候已经分配了内存,而此时对象还没有建立好. 当然它也是被保存到类的方法中的,而不是对象内存中,大家都是可以访 ...
- android中少用静态变量(android静态变量static生命周期)
在android中,要少用静态变量. 我现在做的一个应用中,之前的开发人员使用静态变量来存储cookie,这个全局的静态变量用来验证身份. 这时客户反应,应用长时间不使用,再次使用,会提示身份过期. ...
- 静态变量static
1.在我们平时些程序中我们经常需要一些变量的他们能纪录我们所需要的值,但是平常的int类型达不到这样的目的,所以呢就有了static的基态变量,静态变量就像 B/S中的session,cookio等 ...
- swift -- 静态变量static
import UIKit class ViewController: UIViewController { //静态变量 swift中的static静态变量,只能在这里声明,不能在方法中声明 ...
- Java中的静态变量static
package com.wangcf; public class Test { String name="你好"; static String sex="男"; ...
- php静态变量static
静态变量 function test() { static $a = 0; echo $a; $a++; } test(); test(); test();
- C#中为什么不能再方法里定义静态变量(Static)
c#的静态变量是在对象生成的时候分配内存空间的,而不是函数执行的时候. 如果在函数里定义,那么这个变量就需要在函数执行的时候分配内存空间,这是C#不允许的,至于为什么不允许,个是因为垃圾回收机制的问题 ...
- SpringBoot项目给静态变量static注入@Value
@value不能直接注入值给静态属性,spring 不允许/不支持把值注入到静态变量中:spring支持set方法注入,我们可以利用非静态setter 方法注入静态变量 @Component publ ...
随机推荐
- VNC SERVER配置
vnc的配置网上有很多 普通用户的配置没有怎么写 根据下面这个说法 https://www.digitalocean.com/community/tutorials/how-to-install-an ...
- angularjs自定义过滤器
实现一个按输入框中的数据筛选的功能,筛选可按电影的名称.年份.评分检索框: <input type="text" placeholder="可检索名字评分和年份&q ...
- xtrapivotcontrol 控件用法及相关属性
XtraPivotControl使用指南:可参照以下的文档: 转载自:http://wenku.baidu.com/view/d7886b20aaea998fcc220e53.html 上面链接中对x ...
- 如何让一个json文件显示在表格里
<body> //首先得把架子搭起来 <table id = "tb" border="1"> <tr></tr> ...
- C++语法-指针 (1)
<C++程序设计> 谭浩强 清华大学出版社 2016-08-03 1.P167 一般的C++编译系统为每个指针变量分配4个字节的存储单元,用来存放变量的地址. 2.P169 .cpp文件 ...
- UITableView UITableViewCell
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- OptionsMenu
菜单是用户界面中最常见的元素之一,使用非常频繁,在Android中,菜单被分为如下三种,选项菜单(OptionsMenu).上下文菜单(ContextMenu)和子菜单(SubMenu),今天这讲是O ...
- Java自由块(静态和非静态)(转载)
java中的自由块分为两种: 静态块和非静态块 静态块: public class Test { 2 static int x = 10; 3 //静态块:静态块的执行时机是在class文件装载的时候 ...
- CSS3 仿微信聊天小气泡
今天给大家分享一个我刚做的项目中的一个小案例, 因为我们在做一个聊天的功能,之前的聊天页面UI很丑,我就不在这里展示给大家了. 现在就教大家怎么用css3制作一个和微信聊天界面一样的页面. 首先给大家 ...
- 160个crackme-之Acid burn.exe
工具: Ollydbg(OD) 中文版 运行: 我们拿到一个小程序时,总要看看它到底有什么功能,或者说它阻碍了我们什么,也就是寻找突破口! 这就是程序运行后的主界面 我们进入Serial/Name后, ...