keil下函数体里面的变量初始化问题

[复制链接]
2421|5
 楼主| popeye021 发表于 2013-11-15 09:31 | 显示全部楼层 |阅读模式
如下面情况:
void f(void)
{
      static unsigned char i=0;
      unsigned char j=0;
      unsigned char k=P3;
...............
}

对于变量i,是不是仅仅分配内存时就初始化为0,以后调用函数f时,不会每次都初始化?
而对于变量j和k,则是每次调用函数f,都会初始化为0,以及读取P3端口的值??
电力猫 发表于 2013-11-15 09:47 | 显示全部楼层
不会哇 看看楼下怎么说
li880wert 发表于 2013-11-15 10:36 | 显示全部楼层
这么低级问题,static 是变量是在 常量区的,相当于全局变量。
xinzha 发表于 2013-11-15 10:55 | 显示全部楼层
未初始化或者初始化为0的全局变量和static放在.bss段,非0值的全局变量和static放在.data段,所有这些都是由编译链接器来做的,程序运行时并不执行static或者全局变量的初始化工作部分。
而局部变量在栈内,每次都是新鲜的,所以每次都有相应的代码去初始化他们。深入了解还是去看看编译链接的相关知识。
andyjian 发表于 2013-11-15 16:52 | 显示全部楼层
哈哈,长知识了:lol
andyjian 发表于 2013-11-15 16:53 | 显示全部楼层
学习了,哈哈:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

86

主题

455

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部