它与上述问题不重复,因为未涵盖静态
差异并且答案有错误。
这是一个关于进程内内存组织的基本分解问题,更具体地说,是关于默认数组值。
在下面的代码中:
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];
关于不同内存位置中的 C++ 默认数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58130752/