关于静态变量的问题

JAVA3 2002-12-09 06:13:05
#include "stdafx.h"
#include "iostream.h"

fun()
{
static int j = 0;
cout << j;
j++;
}


int main(int argc, char* argv[])
{
fun();
fun();
return 0;
}

按理说静态变量是固定地址存在,大家都可以来使用。而且前面更改的值他会保留下来。

这段程序连续两次调用函数,第一次调用进行到static int j = 0;时,应该是初始化静态变量j为0,然后j变为1。
问题是第二次调用的时候,执行到static int j = 0;时,那这句话会不会执行呢,如果执行的话,那就是把静态变量又变回0,然后输出结果还是0。可是程序输出结果却是1。说明这句程序并没有执行初始化。直接运行cout << j;。难道可以跳过那句话吗?不解!!!

如果执行的话,是不是有另外分配一块内存,可是对于cout<<j,他到底是取那块内存的数据呢??
...全文
25 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
JAVA3 2002-12-09
  • 打赏
  • 举报
回复
收到,谢谢各位,分钱!!!
hhuangchunlin 2002-12-09
  • 打赏
  • 举报
回复
静态局部变量只会被初始化一次
darkay 2002-12-09
  • 打赏
  • 举报
回复
其实,在fun这个函数的具体生成代码的时候根本就没有
static int j=0;这样的初始化语句,它已经被移到其他地方,如“cwanter(小菜) ”所说。
tjm 2002-12-09
  • 打赏
  • 举报
回复
静态变量在定义时初始化,static int j = 0;是初始化,只调用一次。
siyu2002 2002-12-09
  • 打赏
  • 举报
回复
学习
cwanter 2002-12-09
  • 打赏
  • 举报
回复
对有序类型,在编译时赋初值,其值在EXE文件的.data节中。对类类型对象,在MainCRTStartup中初始化.
liu_feng_fly 2002-12-09
  • 打赏
  • 举报
回复
static int j = 0;这句只执行依次,也就是说静态局部变量只会被初始化一次

70,032

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧