请问方法中的静态变量在哪里存储

complexity 2004-05-13 09:49:40
有一个对象的一个方法里面声明了一个静态变量
然后取出这个变量的地址

我想知道,这个变量的内存在哪里分配?

这个类的不同对象中的这个变量地址相同么?

谢谢!
...全文
229 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lj197912 2004-05-13
  • 打赏
  • 举报
回复
类的静态成员就是为了类对象之间数据共享用的,他不属于任何一个对象。访问它的时候也不需要通过对象,通过类名::。。
oxoxox 2004-05-13
  • 打赏
  • 举报
回复
应该是在堆中。地址是相同的,这个地址也是一个全局的,所有对象实例的该方法共享一个地址,也就共享一个共同的值。
complexity 2004-05-13
  • 打赏
  • 举报
回复
谢谢各位!!

没想到这么快就得到各位高手的答复

再次感谢!
xiyi168 2004-05-13
  • 打赏
  • 举报
回复
静态成员的内存都统一放在静态存储区。
dengchengqiang 2004-05-13
  • 打赏
  • 举报
回复
在钱能的《C++程序设计教程》中说
程序的内存空间分为:代码区,全局数据区,堆区和栈区
在以上测试代码中如果把get()函数改为
void get()
{
static int c;
cout << &c << endl<< c <<endl;
}
可以看到输出时c值为0(自动初始化的值)
而只有全局数据区的变量才会在没有显示初始化的时候得到自动初始化
所以该静态变量放在全局数据区
freefalcon 2004-05-13
  • 打赏
  • 举报
回复
静态变量实际上可以看成是限制了访问权限的全局变量
函数中的局部静态变量在函数首次调用时初始化,以后不再初始化,所以只有一个实例

前面几位都说得很清楚了

dengchengqiang 2004-05-13
  • 打赏
  • 举报
回复
#include<iostream>
using namespace std;

class C
{
public:
void get()
{
static int c;
cout << &c << endl;
}
};

int main()
{
C a, b;
a.get();
b.get();

return 0;
}

测试出地址是一样的
goodname 2004-05-13
  • 打赏
  • 举报
回复
静态变量全局唯一,
与该类的实例无关。

fct0906 2004-05-13
  • 打赏
  • 举报
回复
类的静态成员是不依赖于类的对象实例的,也就是说不管有对少个对象实例,静态的成员永远也只会有一个。
静态成员的内存都统一放在静态存储区。
xyc6838 2004-05-13
  • 打赏
  • 举报
回复
帮你up

64,654

社区成员

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

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