打印

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

[复制链接]
1938|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或者全局变量的初始化工作部分。
而局部变量在栈内,每次都是新鲜的,所以每次都有相应的代码去初始化他们。深入了解还是去看看编译链接的相关知识。

使用特权

评论回复
5
andyjian| | 2013-11-15 16:52 | 只看该作者
哈哈,长知识了:lol

使用特权

评论回复
6
andyjian| | 2013-11-15 16:53 | 只看该作者
学习了,哈哈:)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

86

主题

455

帖子

4

粉丝