这与上面的问题不是重复的,因为没有涵盖statics
的差异,并且答案有误。
这是一个有关进程内内存组织的基本细分问题,更具体地说是默认数组值。在下面的代码中:
arr1
在机器指令附近的内存块中静态分配,并在某些时候默认初始化为0
arr2
应该在创建功能框架时分配在堆栈上,但永远不会默认初始化
arr3
与arr1
[?]相同
arr4
与arr2
[?]相同
arr5
...现在,除了上述两个问题之外,我的主要问题是,类内的static
变量与函数内的static
变量有何不同?我无法访问未初始化的arr5
元素。在什么情况下可以?
int arr1[5];
void func() {
int arr2[5]; printf("%d\n", arr2[0]); // [2]
static int arr3[5]; printf("%d\n", arr3[0]); // [3]
}
class MyClass {
public:
int arr4[5];
static int arr5[5];
};
int main()
{
printf("%d\n", arr1[0]); // [1]
func();
MyClass obj;
printf("%d\n", obj.arr4[0]); // [4]
//printf("%d\n", obj.arr5[0]); // [5]
std::cin.get();
}
输出:
0
-858993460
0
-858993460
最佳答案
根据this article,声明但未定义arr5。
加
int MyClass::arr5[5];
在
class MyClass
声明之后。比你可以得到obj.arr5[0]
class MyClass {
public:
int arr4[5];
static int arr5[5];
};
int MyClass::arr5[5];