首页
社区
课程
招聘
[求助]局部静态变量的问题
发表于: 2018-7-2 21:36 3684

[求助]局部静态变量的问题

2018-7-2 21:36
3684

书上面 P170局部静态变量,这个代码在VC6上面编译后,只初始化一次,不知道为什么?还有就是静态变量的地址找不到该值



[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
#include "stdio.h"

void showstatic(int number)
{
       static int snumber=number;
   
       printf("%d \r\n",snumber);
}
void main()
{
       for(int i=0;i<5;i++)
          showstatic(i);
}
2018-7-2 21:37
0
雪    币: 775
活跃值: (3420)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
3
局部变量是储存在栈上的,当函数执行返回之后,栈的内容就不被保护了,下次函数执行进来的时候,会重新赋值。如果没有赋值的话,高版本编译器会报错提醒你使用了未初始化的变量。
而局部静态变量,是存在在数据段的,不管函数运行不运行,它都在那里,不会因为函数执行完毕就销毁。至于说只初始化一次,这个编译器会自动生成一串伪代码,大概类似于这样:
bool bInit_snumber = false;
       if (!bInit_snumber)
       {
               snumber = number;
       }
而这个bInit_snumber就是系统自动给你分配的一个空间,你可以认为是一个你不会访问到的全局变量。
2018-7-3 11:00
0
雪    币: 288
活跃值: (269)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
#include "stdio.h"

void showstatic(int number)
{
       static int snumber;
       snumber=number;
       printf("%d \r\n",snumber);
}
void main()
{
       for(int i=0;i<5;i++)
          showstatic(i);
2018-7-3 11:02
0
雪    币: 775
活跃值: (3420)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
5
你可以验证一下:
int* p = 0;
void showstatic(int number)
{
       static int snumber = number;
       p = &snumber; //不要对非静态变量进行这样的操作
       printf("%d \r\n", snumber++);
}
void main()
{
       for (int i = 0; i < 5; i++)
               showstatic(i);
       *p = 0;  //观察一下这一行注释掉与不注释的输出区别。
       for (int i = 0; i < 5; i++)
               showstatic(i);

}
2018-7-3 11:08
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
存在数据段这个知道啊!现在问题是数据段该有的地址找不到该值?就我这样代码,调试中不能查看静态变量地址,只能打印这个咋解决?VC6.0
2018-7-7 09:59
0
游客
登录 | 注册 方可回帖
返回
//