C\C++语言细节(2)

C\C++ :  auto  register   extern  static  的作用????

对于一个完整的程序,在内存中的分布情况如下图:

代码区 //low address

全局数据区

堆区// new  /malloc   动态分配的位子,,也就是内存中未被使用的那部分内存

栈区 //high address(局部变量)

auto register 都是定义局部变量的,auto int a 和 int a,无差异,不过最近填了一个新功能(可推断类型):auto a=10;知道a=int a=10;(VS2010,codeblocks)

编译---》链接(extern 表示定义在别个文件中)

A.cpp{  int i; main{}}   B.cpp{int i;main(){}}

编译的时候不会报错,全局变量在编译的时候不透明,

而在链接的时候,会发现有两个i,报错

A.cpp{   main{i;}}   B.cpp{int i;main(){}}

在A中不声明,直接当成用B中的全局变量i,

在编译的时候就会出错(编译阶段不透明)

办法:

extern:

A.cpp{  extern int i; main{}}   B.cpp{int i;main(){}}

static:更麻烦,

static int i ;静态全局变量,全局变量区,

定义全局变量就可以实现变量在文件中的共享

静态全局变量不能被其它文件所用;

int i; 默认动态全局变量,

静态局部变量:在函数的内部定义,但是还是在全局数据区分配内存:

int f(){static int n=1;n++;cout<<n;}

main(){f();f();f();} 第一次调用的时候定义,第二个就不用定义,输出:2,3,4

在类中:静态数据成员:被该类的所有对象所共享

            静态成员函数只能访问静态数据成员和函数

extern   static  全局变量区,

原文地址:https://www.cnblogs.com/shuguang/p/2807705.html