Страницы

Поиск по вопросам

понедельник, 30 декабря 2019 г.

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

#cpp


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

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


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

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


Ответы

Ответ 1



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

Комментариев нет:

Отправить комментарий