生命周期,作用域的定义;说明全局变量、静态变量、局部变量、const变量的生命周期、作用域

生命周期,作用域的定义;说明全局变量、静态变量、局部变量、const变量的生命周期、作用域:

生命周期:是一个变量存在的周期。

作用域:是一个变量可以被引用的范围。最常见的如:{}、static修饰符等等。

1)全局变量:

作用域:全局作用域(只需要在一个源文件中定义,就可以作用于所有的源文件);

生命周期:程序运行期一直存在;

引用方法:其他文件如果要使用,必须用extern 关键字声明要引用的全局变量;

内存分布:全局(静态存储区)。

注意:如果再两个文件中都定义了相同名字的全局变量,则连接错误:变量重定义。

2)全局静态变量:

生命周期:程序运行期一直存在;

作用域:文件作用域(只在被定义的文件中可见:static的一个作用就是隐藏

内存分布:全局(静态存储区)。

定义方法:static关键字,const关键字(注意C/C++意义不同)

注意:只要文件不相互包含,两个不同的文件中是可以定义完全相同的两个全局静态变量的。

3)静态局部变量:

生命周期:程序运行期一直存在;(超过其作用域便无法被引用)

作用域:局部作用域(只在局部作用于可见)

内存分布:全局(静态存储区)。

定义方法:局部作用域中用static定义。

注意:只被初始化一次,多线程中需要加锁保护。

4)局部变量:

生命周期:程序运行处局部作用域 即被销毁

作用域:局部作用域(只在局部作用于可见)

内存分布:栈区

定义方法:在局部作用域中用auto指示符定义,可省略auto

static int c =  1;//全局初始化去(静态全局变量)
int a = 0; //全局初始化区(全局变量)
char  *p1; //全局未初始化区(全局变量)

int main(int argc, char const *argv[])
{
	int b;//存放于栈区(局部变量)
	char s[] = "abc";//s存放于栈区(局部变量)
	char *p2 ;//栈(局部变量)
	char *p3 = "123456";//p3存放于栈区(局部变量);“123456”存放区文字常量区

	static int c = 0;// c存放于全局初始化区(静态局部变量)
	p1 = (char *)malloc(10);
	p2 = (char *)malloc(20);//分配得来的10和20字节的区域在堆区;
							//变量p1、p2指向堆区分配的内存

	strcpy(p1, "123456");//“123456”存放区文字常量区
	return 0;
}
时间: 2024-08-09 17:25:55

生命周期,作用域的定义;说明全局变量、静态变量、局部变量、const变量的生命周期、作用域的相关文章

iOS中block 静态全局局部变量block变量,以及对象,详解!

//最近总是犯迷糊,关于block对外部变量的引用,今天有时间就写了一下,加深自己的理解,巩固基础知识 1 #import <Foundation/Foundation.h> 2 int gNum = 100; 3 int main(int argc, const char * argv[]) { 4 @autoreleasepool { 5 static int sNum = 100; 6 __block int bNum = 100; 7 int lNum = 100; 8 int (^s

程序在运行过程中变量的保存位置与生命周期

本例说明了一个程序在运行的时候,各种变量所保存的位置.因为位置不同,自然,变量的生命周期也各不相同. 代码示例: #include <iostream> using namespace std; int nGNum1; void showStackAddress(){    cout<<"address of showStackAddress() is:\t["<<(void*)&showStackAddress<<"]

实例变量,局部变量,全局变量,静态全局变量

摘抄网上的 定义: 实例变量:定义在一个类的各个内部方法之外,是内部方法共享的变量 局部变量:定义在方法之中的变量,但是这个方法使用的变量,其他方法和类没法使用. 全局变量:也称为外部变量,它是在函数外部定义的变量,一个程序的所有的java源文件都可用. 静态全局变量:一程序由多个java源文件组成时,可以用静态全局变量指定某一个java源文件,仅这个java文件可用这变量. 1 int a,b; //外部变量 2 static int c;//静态外部变量 3 4 public class S

javaScript定义函数的三种方式&amp;amp;变量的作用域

一.函数定义 方式1.普通方式定义函数 function 函数名(參数n){ 函数体 } function add(a,b){ return a+b; } 方式2.直接量定义函数 var 函数名=function(參数n){ 函数体 } var add=function(a,b){ return a+b; } 方式三.构造方式定义函数 var 函数名=new Function(參数n,函数体); var add = new Function('a,b','return a+b;'); 二.变量的

javascript在私有作用域中定义私有变量和私有函数 (1)

javascript没有私有成员,但是有私有变量,所有对戏那个属性都是公有的 任何在函数中定义的变量,都可以认为是私有变量,因为函数内部不能访问. 私有变量包括:函数的参数.局部变量.函数内部定义的其他函数 - 在私有作用域中定义私有变量和私有函数 function MyObject(){ //私有变量和私有函数 var privateVariable=10; function privateFunction(params) { return false } //特权方法----有权访问私有变量

作用域,局部和全局变量

全局与局部变量 在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量. 全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序. 当全局变量与局部变量同名时: 在定义局部变量的子程序内,局部变量起作用:在其它地方全局变量起作用. 局部变量只在一个函数内生效.在函数内部定义的不会再其他函数生效. 如果把局部变量加上global.可以变成全局变量.(global 变量名)不建议使用.容易逻辑混乱. 函数对局部变量是一个作用域. 全局变量:在整个代码的顶层定义的变量,所有的函数

【debug】vs2013中定义的全局变量count在使用时提示:“不明确的符号”

今天用vs2013编写程序时遇到以下这么一个bug 提示错误信息:count:不明确的符号,,count明明定义为全局变量,怎么成为不明确的符号了呢??百思不得其解 查阅资料找到了答案:命名空间std有一个count函数 编译器不知道调用的是:std::count(),还是用户定义的全局变量count,故报错 解决办法,在count前面加上作用域标识符:::count即可 如果同时要用到std中的count函数,加上命名空间和作用标识符即可:std::count() 版权声明:本文为博主原创文章

python中的作用域以及内置函数globals()-全局变量、locals()-局部变量

在python中,函数会创建一个自己的作用域,也称为为命名空间.这意味着在函数内部访问某个变量时,函数会优先在自己的命名空间中寻找. 通过内置函数globals()返回的是python解释器能知道的变量名称的字典(变量名:值): 而locals()函数返回的是函数内部本地作用域中的变量名称字典.由此可以看出,函数都是由自己独立的命名空间的. 查看全局变量和局部变量: #coding=utf-8 outerVar="this is a global variable"def test()

C++类特殊成员变量(引用、静态、常成员变量)的初始化操作

有些成员变量的数据类型比较特别,它们的初始化方式也和普通数据类型的成员变量有所不同.这些特殊的类型的成员变量包括: a.引用 b.常量 c.静态 d.静态常量(整型) e.静态常量(非整型) 常量和引用,必须通过参数列表进行初始化. 静态成员变量的初始化也颇有点特别,是在类外初始化且不能再带有static关键字,其本质见文末. 参考下面的代码以及其中注释: #include <iostream> using namespace std; class BClass { public: BClas