这两个静太变量怎么理解好?

jiangxinwei 2008-07-27 03:59:01
#include "iostream.h"
#include "newh.h"

void setvars();

int main()
{
test t;
static int s_i =10;//i_s作用区域不一样
{
static int s_i =120;
cout<<s_i<<endl;
}

cout<<s_i<<endl;

setvars();
setvars();
return 0;

}

提问:
这里的static int s_i 变量为什么我在vc6的编译器里不能调试啊。我在这两个变量所在的行都设置了断点,编译器提示说无效的行。我本是想看看这两个静态的变量是怎么存放的。是不是这两个静态的变量存在不同的地址里。不然的话应该就冲突了。静态变量放在程序的什么区域的?
对这我的理解有点模糊
...全文
66 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiangxinwei 2008-07-27
  • 打赏
  • 举报
回复
呵呵。int *p1,*p2;

static int s_i =10;//i_s作用区域不一样
p1= &s_i;

{
static int s_i =120;
p2 = &s_i;
cout<<s_i<<endl;
}

cout<<s_i<<endl;
我加了两个指针。调试了一下果然两个地址值不一样。谢谢大家
he9hehe 2008-07-27
  • 打赏
  • 举报
回复
所谓静态变量,就是说这个变量不是运行时产生的,静态变量放在全局数据区,程序一加载,静态变量和全局变量就已经在内存中存在了,而且要到程序退出的时候才销毁。不同作用域的静态变量肯定放在不同位置。
代码块里边的自动变量是要到执行这段代码的时候才在内存中产生,如
{
int i;
i=9;
}。变量i在执行这段代码的时候在栈上产生,执行完后销毁,该数据就无效了。
hslinux 2008-07-27
  • 打赏
  • 举报
回复
静态变量定义处设置断点无效的。
开心爸爸84 2008-07-27
  • 打赏
  • 举报
回复
0x00417004 0a 00 00 00 78 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00
开心爸爸84 2008-07-27
  • 打赏
  • 举报
回复
vs 2005 编译通过
结果
120
10
  • 打赏
  • 举报
回复
静态存储区域,你可以现对s_i取一下地址,在内存窗口看

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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