您的位置:首页 > 编程语言 > C语言/C++

变量及函数的生存期、作用范围、链接属性

2015-07-21 23:33 351 查看
变量的内存中的存储区域

变量的生存期

变量的作用范围

变量的链接属性

函数的链接属性

变量的内存中的存储区域

自动变量:利用堆栈机制来实现,放在堆栈段

静态局部变量:数据段

全局变量:数据段

变量的生存期

自动变量:在函数内部定义的变量。从声明处开始,到程序离开包含该条语句的
}
消亡。

静态局部变量:由于保存在数据段,所以从声明开始存在,直到整个程序结束。

全局变量:程序开始到结束

变量的作用范围

自动变量:该变量从声明开始存在,到包含该条语句的
}
。出了这个范围无效。

静态局部变量:在函数内部,离开定义它的函数就无法访问了

全局变量:整个文件,

变量的链接属性

自动变量:当函数结束弹栈的时候,所有的自动变量都会销毁,所以自动变量在外部文件中无效。

静态局部变量:无法在外部文件访问

全局变量:具有extern链接属性,可以在外部文件访问,因此同一全局变量只可以定义一次,在外部使用时要先声明
extern Type variable


函数的链接属性

函数具有extern链接属性

/********** 1.cpp ******************/
int global_var = 1;

{
int auto_var2 = 1;
static int static_var2 = 2;
}


/**************** 2.cpp ***************/
#include <iostream>
using namespace std;

int foo() {

static int static_var = 3;
static_var++;
return static_var;
}

int main() {
// 自动变量
{
int auto_var = 0;
}
// cout << auto_var << endl;    // ERROR

// 静态局部变量
foo();
cout << foo() << endl;  // 5
//cout << static_var << endl; // ERROR

// 全局变量
extern int global_var;
cout << global_var << endl;

// 无法访问1.cpp中的auto, static变量
// extern int auto_var2;
// cout << auto_var2 << endl;
// extern static int static_var2;
// cout << static_var2 << endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++