Это не дублирует вышеуказанный вопрос, поскольку 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