请问一个简单的static问题

NesTa_xP 2008-03-20 03:05:32
void a()
{
static int b;
}
请问在函数体外能不能访问变量b啊?
...全文
116 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
uwinb 2008-03-20
  • 打赏
  • 举报
回复
void a()
{
static int b;
}

int main()
{
*(int*)0x404010=18;
return 0;
}

变量b的值可以用调试器查看!
Maxwell 2008-03-20
  • 打赏
  • 举报
回复
标识符b是不能访问到了,不过对于b所占用的内存,c/c++没有做不到的。
aini10011 2008-03-20
  • 打赏
  • 举报
回复
11楼的很完整
学习,学习~
ttkk_2007 2008-03-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 csdn5211 的回复:]
能,只不过不能有b这个变量名而已。
[/Quote]
说说看
from2008 2008-03-20
  • 打赏
  • 举报
回复
根据你写的函数
好像不能访问
yqw945 2008-03-20
  • 打赏
  • 举报
回复
静态变量分静态全局变量和静态局部变量,就生存周期而言他们都具有全局寿命,初始化工作只做一次,但初始化的时间是不同的。

静态全局变量在main函数开始之前就完成了初始化工作,作用域覆盖整个文件,因此在同一文件下的任何一个函数中是都可以访问它的。

静态局部变量只是在程序执行时第一次执行到该语句时才做初始化工作,虽然具有全局寿命,但是作用域只是在声明它的函数中。其他地方是不能访问的。

楼主所写显然是静态局部变量,所以一般来说在其他地方是不能访问的,但又由于静态变量具有全局寿命,它的值存放在全局数据区而不是堆栈区,所以它的只要知道它的物理地址,在其他的函数中仍然是可以获取到它的值。


#include<iostream.h>
int& a()
{
static int b ;
return b;
}
void main()
{
int b = a();
cout<<b<<endl;
}

晨星 2008-03-20
  • 打赏
  • 举报
回复
但其生存周期长于一次函数调用,这一点跟非static的局部变量不一样。
晨星 2008-03-20
  • 打赏
  • 举报
回复
访问不了。
qiucp 2008-03-20
  • 打赏
  • 举报
回复
no
sheenl 2008-03-20
  • 打赏
  • 举报
回复
不能.

当然, 如果十八般兵器都用上, 铁了心想访问的话, 还是可能的.
dubiousway 2008-03-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 csdn5211 的回复:]
能,只不过不能有b这个变量名而已。
[/Quote]

不值所云
愿闻其详。。
jieao111 2008-03-20
  • 打赏
  • 举报
回复
听谁的...
csdn5211 2008-03-20
  • 打赏
  • 举报
回复
能,只不过不能有b这个变量名而已。
ouyh12345 2008-03-20
  • 打赏
  • 举报
回复
不能
dubiousway 2008-03-20
  • 打赏
  • 举报
回复

按你写的函数,不能。

除非你把静态变量的地址传出去

csdn5211 2008-03-20
  • 打赏
  • 举报
回复
能。

33,317

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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