浅谈C中静态变量与全局变量初始化时间

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

化的值,不是在循环体完成的.继续下看. while(1) {
static b=1; a=2; b++; a++; }
注意这一句:
static b=1;为什么我们循环体无限循环,b 他只会赋一次值呢,从C上面是看不出来的.
经过我反汇编发现,
static b=1; 根本不在循环体中.可以想像,程序被译成目标机器的时候是这个样子 while(1)
1/1
那么这个 a,b变量都在哪呢,他们呆在所谓的静态存储区(后面有介绍),物理上整个程序中任意代码都能访问到这片 区域,说明他们在存储上是一样的.但是a,b区别又在哪呢,就是对他们的引用,编译器,允许你任何地方,函数中调用a,而 b,不行,他有局部作用域,比如你在一个函数中声明了静态变量b,那只能在这函数中调用b.如果在其它的地方调用它,编 译器会报错.这就是逻辑上的控制,而实际上,"物理"上是允许程序在任意地方访问b变量,但是编译器哥哥不会让你访 问.
浅谈C中静态变量与全局变量初始化时间
浅谈C中静态变量与全局变量初始化时间 发表于2012/10/26 13:43:10 7432人阅读 分类: C语言+编程
int a; main() { while(1) {
static b=1; a=2; b++; a++; } }
我们所理解的静态变量b,只知道它在上面的函数内部只初始化一次,其实是个假像 ,我要表达的是,事实上b初始
那什么又叫静态存储区呢,我个人认为就是这是安全区域,不会随便被别的变量替掉.分给你的就是你的,不会被 别人给占了.
谈到这里我们顺便提一下,我们其它函数的局部变量存在内存中的位置,局部变量存放在栈中,栈是一片特殊内 存区域,多个变量可能共享使用这片区域,这里我们就可以看到一个问题,既然共享使用,假如我们声明一个局部变量,如 果不赋初值,这个变量所在栈中的位置,这个位置包含的值,是随机的,是上次别的变量留下来的值.
{
//static b=1; a=2; b++; a++; }
这句没有!
那么b是什么时候赋源自文库值呢,是编译的时候就确定了。。就是说,编译的时候,就给b初始化好了!
类似,我们定义全局变量,如果不赋值,编译器给他赋上0.如果定义了值,就在编译的时候就确定下来了,这个 值是编译器根据我们的语句赋给它的.而不程序中指令赋给它的!
相关文档
最新文档