首页
论坛
课程
招聘
[求助]局部静态变量的问题
2018-7-2 21:36 1566

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

2018-7-2 21:36
1566

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



2021 KCTF 秋季赛 防守篇-征题倒计时(11月14日截止)!

收藏
点赞0
打赏
分享
最新回复 (5)
雪    币: 8
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
meteorsnow 活跃值 2018-7-2 21:37
2
0
#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);
}
雪    币: 298
活跃值: 活跃值 (262)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
yeyeshun 活跃值 2 2018-7-3 11:00
3
0
局部变量是储存在栈上的,当函数执行返回之后,栈的内容就不被保护了,下次函数执行进来的时候,会重新赋值。如果没有赋值的话,高版本编译器会报错提醒你使用了未初始化的变量。
而局部静态变量,是存在在数据段的,不管函数运行不运行,它都在那里,不会因为函数执行完毕就销毁。至于说只初始化一次,这个编译器会自动生成一串伪代码,大概类似于这样:
bool bInit_snumber = false;
       if (!bInit_snumber)
       {
               snumber = number;
       }
而这个bInit_snumber就是系统自动给你分配的一个空间,你可以认为是一个你不会访问到的全局变量。
雪    币: 287
活跃值: 活跃值 (32)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
sjh_pediy 活跃值 2018-7-3 11:02
4
0
#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);
雪    币: 298
活跃值: 活跃值 (262)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
yeyeshun 活跃值 2 2018-7-3 11:08
5
0
你可以验证一下:
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);

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