当前位置: > 财经>正文

[转载]C语言 静态外汇和动态外汇的区别在哪

2023-08-27 02:03:57 互联网 未知 财经

[转载]C语言

int a;

main()

{

while(1)

{

   static b=1;

   a=2;

   b++;

   a++;

}

}

我们所理解的静态变量b,只知道它在上面的函数内部只初始化一次,其实是个假像 ,我要表达的是,事实上b初始化的值,不是在循环体完成的.继续下看.

while(1)

{

   static b=1;

   a=2;

   b++;

   a++;

}

注意这一句:

static b=1;为什么我们循环体无限循环,b 他只会赋一次值呢,从C上面是看不出来的.

   经过我反汇编发现,

static b=1; 根本不在循环体中.可以想像,程序被译成目标机器的时候是这个样子

   while(1)

{

   //static b=1;   这句没有!

   a=2;

   b++;

   a++;

}

那么b是什么时候赋的值呢,是编译的时候就确定了。。就是说,编译的时候,就给b初始化好了!

类似,我们定义全局变量,如果不赋值,编译器给他赋上0.如果定义了值,就在编译的时候就确定下来了,这个值是编译器根据我们的语句赋给它的.而不程序中指令赋给它的!

     那么这个 a,b变量都在哪呢,他们呆在所谓的静态存储区(后面有介绍),物理上整个程序中任意代码都能访问到这片区域,说明他们在存储上是一样的.但是a,b区别又在哪呢,就是对他们的引用,编译器,允许你任何地方,函数中调用a,而b,不行,他有局部作用域,比如你在一个函数中

版权声明: 本站仅提供信息存储空间服务,旨在传递更多信息,不拥有所有权,不承担相关法律责任,不代表本网赞同其观点和对其真实性负责。如因作品内容、版权和其它问题需要同本网联系的,请发送邮件至 举报,一经查实,本站将立刻删除。