инициализация int[] по умолчанию

152
25 января 2021, 10:20

Наткнулся на интересную особенность при инициализации массива int.

int arr1[10];
int main() {
    int arr2[10];
    return 0;
}

Все значения arr1 равны 0, а все значения arr2 значениями -858993460 ( мое предположение, что это просто неинициализированная память)

Вопрос такой: почему снаружи main компилятор делает что-то типа этого int arr1[10] = {}; , а внутри не делает ничего?

Answer 1

Таковы правила инициализации всех объектов со статическим классом хранения. И в С, и в С++ они подвергаются нулевой инициализации, если вы не предоставили явного инициализатора.

В С++ процесс инициализации существенно более сложен, чем в С, т.к. С++ поддерживает динамическую инициализацию, но к вашему случаю это не относится.

Автоматические переменные тривиальных типов не подвергаются никакой инициализации, если вы явно не укажете инициализатор.

READ ALSO
Как портировать код qt Window в linux?

Как портировать код qt Window в linux?

Есть одноплатный компьютер для него написал код с графикой использую qtКод писался на Windows как перенести его на Linux, SDK qt на Linux установил но как...

158
Узнать, является ли поток бинарным

Узнать, является ли поток бинарным

Предположим, что у меня есть поток для записи в файл ofstream

110
ISO C++ forbids comparison between pointer and integer [-fpermissive]

ISO C++ forbids comparison between pointer and integer [-fpermissive]

Проблема заключается в том, что код спокойно выполняется на онлайн gcc компиляторах и MSVS, а у меня - нетОшибку видит в строках while (string[i] != '\0') и ошибкуerror:...

90
Как использовать метод dataset в jQuery?

Как использовать метод dataset в jQuery?

У меня возник вопрос, как я могу удалить блоки через datasetЧтобы каждый блок удалялся по отдельности по клику

141