变量存储类型

1、变量存储类型


特别注意: 

1)局部变量默认是自动auto存储,可以省略不写;

 2)register寄存器存储,速度很快,目前用的不多;   

 3)static位于静态存储区,既可以申明局部变量也可以申明全局变量,如果申明的全局变量只能作用与本文   件,这也是static的好处,可以避免一些全局变量不被其它文件使用,但可以被本文件的其他函数使用;static声明的变量自动赋初值0;

 

局部变量:也即是在函数内定义的变量,每次函数调用时赋初值,调用后释放;

全局变量:也即是在函数外定义的变量,只是在编译时赋值,只赋值一次,不会被释放,也即值有延续性;

4)extern关键字的作用是声明变量和函数为外部链接,即该变量或函数名在其它文件中可见。

   用其声明该变量或函数在别的源文件已经定义过。

   eg:  extern int a;

 仅仅是一个变量的声明,其并不是在定义变量a,并未为a分配内存空间变量a在所有模块中作为一 种全局变量只能被定义一次,否则会出现连接错误,多为重定义错误;

 

总结在同一个工程下的相关联文件,有一个文件定义了全局变量或函数,全局变量可以被其它文件 访问使用,但需要借助extern申明一下如:extern int x,y; 而不是定义,如果是定义就 重复了会连接出错;且可以申明成全局或局部变量,若申明成全局变量可以被该文件下的所有 函数使用;但记住这个全局变量是其它文件定义的,本文件只是申明引用一下;

注:申明变量的extern关键字一定不能省略;

 

若引用其它文件的子函数,用extern申明一下,如:extern void fun();

此时这个extern关键字可以省略,一般最好不要省略,不然不好区分是定义的还是申明的;

5) 声明与定义的区别

     函数或变量在声明时,并没有给它实际的物理内存空间,它有时候可以保证你的程序编译通过, 但是当函数或变量定义的时候,它就在内存中有了实际的物理空间,如果你在编译模块中引用的外部变量没有在整个 工程中任何一个地方定义的话, 那么即使它在编译时可以通过,在连接时也会报错,因为程序在内存中找 不到这个变量!你也可以这样理解, 对同一个变量或函数的声明可以有多次,而定义只能有一次!

 

 

 1.cpp如下:                                                          2.cpp如下:

 
int x,y;                               extern int x,y;
extern void PrintHello();              void PrintHello()
void Func1()                           {
{                                          cout<<"hello!"<<endl; 
    x=123;                             }
}                                      void Func2()
int main()                             {
{                                          y=x*10;
    PrintHello();                      }   
    ......                             
}


在2.cpp中使用extern int x,y;只是声明了x,y这两个变量,它告诉编译器其后的变量已经在别的文件中说明,不再 为它们分配 内存。当两个文件都编译成为.obj后,连接时所有的外部变量和函数都得到统一,可以共享各自定义的全局 变量和函数。

在1.cpp中使用extern void PrintHello(); 声明了引用其它文件的一个子函数;

 

 

 

 

 

   

v

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值