#c
Представим я инициализирую двумерный массив: double name[2][2]; И у меня есть процедура для его распечатки; Имеет она такой вывод: 0.0 0.0 0.0 0.0 . Вразве он не должен получить случайное значение? Почему он инициализируется нулем, если я не применял никаких классов хранения? Одномерный ,например, получает случайные значения.
Ответы
Ответ 1
Во-первых, в вашем примере объявления вы никак не инициализируете массив. Во-вторых, будет ли массив, объявленный без явного инициализатора как-то инициализироваться сам по себе, зависит от того контекста, в котором он объявлен. Этот контекст будет определять класс хранения вашего объекта, даже если вы и не "применяли никаких классов хранения" явно. Вы же никакого контекста не привели. Итак Объект с автоматической классом хранения (переменная, определенная в блоке) будет изначально содержать непредсказуемые значения. Объект со статическим классом хранения (напр., переменная, определенная на уровне файла) будет инициализирован нулями. Объект, являющийся частью агрегата (поле структуры, элемент массива), инициализируется так, как инициализируется сам охватывающий агрегат. В-третьих, если объект не инициализируется, это совсем не означает, что он обязан получать какие-то "страшные" значения. Чисто вследствие стечения обстоятельств ваш неинициализированный объект может оказаться заполненным нулями. Ноль - такое же непредсказуемое значение, как и любое другое непредсказуемое значение. Более того, никто не запрещает конкретной реализации обнулять все переменные без исключения (каким бы способом это ни делалось). С точки зрения языка неинициализированный объект все равно будет содержать непредсказуемые значения. (Имейте также в виду, что такое непредсказуемое значение не только непредсказуемо само по себе, но также и не обладает гарантией стабильности: последовательные чтения неинициализированного объекта могут "видеть" в нем разные значения.) Двумерность вашего массива, как таковая, тут никакой роли не играет.
Комментариев нет:
Отправить комментарий