Что такое инициализация в программировании
Перейти к содержимому

Что такое инициализация в программировании

  • автор:

Что такое определение, объявление и инициализация переменной

Объясните пожалуйста доступно, что такое определение, объявление и инициализация переменной. Как их отличать синтаксически. Что без чего можно делать, а что без чего нельзя. Прочитал уже несколько статей, теперь в голове только каша

Отслеживать
123k 24 24 золотых знака 126 126 серебряных знаков 303 303 бронзовых знака
задан 13 июн 2020 в 12:45
221 1 1 золотой знак 3 3 серебряных знака 12 12 бронзовых знаков
Чтобы каши в голове не было, лучше читать учебники.
13 июн 2020 в 12:47
@SergeyGornostaev посоветуй, пожалйста книгу, где можно об этом почитать
13 июн 2020 в 12:59

Приведённые раньше ответы неверные. Уже неоднократно поднималась эта тема на стеках. Вот пример правильного ответа stackoverflow.com/a/1410632. Также можно почитать тут en.cppreference.com/w/cpp/language/declarations, en.cppreference.com/w/cpp/language/definition. Ну и в Стандарте, разумеется eel.is/c++draft.

13 июн 2020 в 13:06
@Slad, если вам нужны формально точные определения, тогда берите стандарт языка.
13 июн 2020 в 13:22
7 июл 2020 в 13:16

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Нижеизложенное сильно упрощено. Здесь не преследуется цель рассказать подробно все нюансы — для этого лучше почитать Стандарт языка.

Объявление (declaration) переменной информирует компилятор о том, что где-то, возможно, в другой единице трансляции (очень грубо, в другом cpp-файле) выделено sizeof байт под хранение переменной такого-то типа с таким-то именем. Деклараций можно писать сколько угодно в разных блоках кода, по одной на блок.

Определение (definition) переменной информирует тот же компилятор о том, что память под переменную нужно взять прямо в этом месте, где написано данное определение. Именно в этой единице трансляции. Определение на всю программу может быть одно и только одно.

Этими процессами управляют квалификаторы static , extern , thread_local и некоторые другие.

Чаще всего, происходят одновременно объявление и определение, например

int a; // вне функций - заставит компилятор создать глобальную переменную. < int a; //в блоке кода - переменная будет существовать до конца блока, а память будет выделена на стеке >

Примером чисто объявления идентификатора будет объявление его со спецификатором static внутри структуры:

struct A < static int a; // объявление A::a >; 

Никакая память на данный момент не выделена, но компилятор теперь знает, что у него такое есть. Для использования этого поля необходимо прежде определить его вне структуры:

int A::a; // определение A::a int b = A::a; // теперь можно 

Использование ключевого слова extern , которое как раз говорит компилятору, что переменная объявлена где-то в другой единице трансляции

 //alpha.cpp int a; //beta.cpp extern int a; // указали, что будем пользоваться `int a` из `alpha.cpp` 

Само связывание имен и памяти произойдет на этапе компоновки программы.

Инициализация в смысле C++ — это когда определение и объявление объединяют с присваиванием начального значения;

Будет инициализацией в смысле практики программирования (самая первая запись в переменную), но не будет инициализацией в смысле C++ — это идущие подряд определение и присваивание.

Чтение из неинициализированной переменной — форменное UB. Так писать нельзя, это неправильно.

Инициализация

Инициализация (от англ. initialization, инициирование) — создание, активация, подготовка к работе, определение параметров. Приведение программы или устройства в состояние готовности к использованию. [1]

Термин употребляется как для программных, так и для аппаратных средств.

Действие инициализации направлено извне по отношению к инициализируемому объекту (программе, устройству) и необходимо для определения параметров и правил работы с ним.

Примеры

  • Инициализация подсистемы печати для вывода на принтер. Перед печатью необходимо определить, на каком устройстве будет произведена печать и учесть особенности работы с ним (поддерживаемый формат печати, максимально возможное разрешение, возможность использования цвета и т. п.). Для этого устройство активируют (подача питания, управляющий сигнал), запрашивают возможные параметры работы или «сканируют» устройство для определения его возможностей, и значения этих параметров используют для первоначальной настройки подсистемы печати, чтоб она могла предложить пользователю варианты печати, соответствующие его оборудованию.
  • Инициализация программы заключается в задании начальных значений или установке в нуль программных переменных (адресов, счетчиков, переключателей, указателей и т. п.) перед выполнением программы. Во многих языках программирования имеются средства определения начальных значений при первом описании переменной.
  • Инициализация магнитного диска «винчестера» включает его форматирование и запись управляющей информации (метки тома, описателей дорожек и т. п.).

См. также

  • Отложенная инициализация (шаблон проектирования)
  • Инициация

Примечания

  • Найти и оформить в виде сносок ссылки на авторитетные источники, подтверждающие написанное.
  • Дополнить статью (статья слишком короткая либо содержит лишь словарное определение).
  • Компьютер

Wikimedia Foundation . 2010 .

Синонимы:

Полезное

Смотреть что такое «Инициализация» в других словарях:

  • инициализация — инициирование Словарь русских синонимов. инициализация сущ., кол во синонимов: 2 • инициирование (4) • … Словарь синонимов
  • инициализация — Приведение областей памяти в состояние, исходное для последующей обработки или размещения данных. [ГОСТ 19781 90] инициализация Присваивание начальных значений переменным программы [ГОСТ 28397 89] Тематики обеспеч. систем обраб. информ.… … Справочник технического переводчика
  • Инициализация — 37. Инициализация Initialize Присваивание начальных значений переменным программы Источник: ГОСТ 28397 89: Языки программирования. Термины и определения оригинал документа 3. Инициализация Приведен … Словарь-справочник терминов нормативно-технической документации
  • инициализация — iniciacija statusas T sritis automatika atitikmenys: angl. initialization; initializing; initiating; initiation vok. Initialisieren, n; Initialisierung, f rus. инициализация, f; инициирование, n; присваивание начального значения, n pranc.… … Automatikos terminų žodynas
  • инициализация (периферийного устройства) — Операция, необходимая для установки периферийного устройства в исходное положение и выполняемая до начала использования носителя данных или начала реализации процесса. [Е.С.Алексеев, А.А.Мячев. Англо русский толковый словарь по системотехнике ЭВМ … Справочник технического переводчика
  • инициализация (спутникового приемника) — Процедура измерений для предварительного разрешения неоднозначности перед началом спутниковых определений в кинематическом режиме. [РТМ 68 14 01] Тематики спутниковая технология геодезических работ Обобщающие термины методы спутниковых… … Справочник технического переводчика
  • инициализация диска — Разметка диска и запись на него управляющей информации. [Е.С.Алексеев, А.А.Мячев. Англо русский толковый словарь по системотехнике ЭВМ. Москва 1993] Тематики информационные технологии в целом EN initializationdisk … Справочник технического переводчика
  • инициализация общего опроса — — [ГОСТ Р МЭК 60870 5 103 2005] Тематики телемеханика, телеметрия EN initiation of general interrogation … Справочник технического переводчика
  • инициализация периферийного устройства — Операция, необходимая для установки периферийного устройства в исходное положение и выполняемая до начала использования носителя данных или начала реализации процесса. [ГОСТ 25868 91] Тематики оборуд. перифер. систем обраб. информации EN… … Справочник технического переводчика
  • инициализация системы — — [Л.Г.Суменко. Англо русский словарь по информационным технологиям. М.: ГП ЦНИИС, 2003.] Тематики информационные технологии в целом EN system initialization … Справочник технического переводчика
  • Обратная связь: Техподдержка, Реклама на сайте
  • �� Путешествия

Экспорт словарей на сайты, сделанные на PHP,
WordPress, MODx.

  • Пометить текст и поделитьсяИскать в этом же словареИскать синонимы
  • Искать во всех словарях
  • Искать в переводах
  • Искать в ИнтернетеИскать в этой же категории

Инициализация переменных

Во время объявления переменных можно сообщить им значение путем помещения знака равенства и константы после имени переменной. Этот процесс называется инициализацией и в общем случае имеет вид:

тип имя_переменной — константа;

Ниже приведено несколько примеров

float balance = 123.23;

Глобальные и статические глобальные переменные инициализируются только при запуске программы. Локальные переменные инициализируются каждый раз при входе в блок, где они были объявлены. Статические локальные переменные инициализируются только один раз, а не каждый раз при входе в блок. Глобальные и статические локальные переменные инициализируются нулем, если не указано инициализационное значение. Неинициализирующиеся нестатические локальные и регистровые переменные будут иметь неопределенное значение.

Объявление? Определение? Инициализация?

В чем разница между объявлением переменной, её определением и инициализацией

Начинающим программистам первое время бывает трудно запомнить все те названия и термины, которые обрушиваются на них из учебников и современных вебинаров. Особенно, если они еще чем-то похожи между собой.

Такими близкими по смыслу и довольно часто путающимися являются понятия «объявление» переменной, её «определение» и её «инициализация».

В силу некоторой личной привычки я иногда фиксирую результаты гугления по тому или иному вопросу, связанному с обучением, в небольших конспектах. Это помогает разобраться в материале, систематизировать его и по-своему, более удобно для себя изложить. В дальнейшем такие записи помогают быстро повторить пройденный материал и являются своеобразным альтернативным вариантом изложения той или иной учебной темы.

И поскольку мы живем в жутко социализированное время, то естественно хочется поделиться результатами своего труда с другими,такими же начинающими программистами. Возможно кому-то это тоже пригодится.

Объявление переменной или константы

Итак, выражение называется объявлением переменной или декларированием. На английском это выглядит так — Declaring Constants and Variables:

var a = 10

В приведенном примере задана переменная (var), задано имя переменной (а) и задано значение переменной (10).

Определение переменной или константы

Как известно, объявить переменную мы можем и без указания значения. Но тогда нужно указать тип данных будущего значения.

var b: Int?

Вспомним, зачем это делается. Если в первом случае мы сразу указываем значение, то Swift автоматом определяет тип данных значения. Если же значение не указано, то Swift не знает, какого типа данные в ней будут храниться и ему нужно явно указать этот тип.

Заодно и еще один термин — аннотация типа. Это вот как раз результат действия по определению, а именно слово Int?.

Аннотация типа может быть простая, состоящая из одного слова, обозначающая тип данных, так и составная. Например, в кортежах (tuples) может быть и такая запись

var b: (Int, Int, Int)

И кстати, для чистоты кода в Swift рекомендуется не ставить пробел между именем переменной и двоеточием.

Инициализация переменной или константы

В первом примере, который мы продублируем ниже, где происходит не только объявление переменной, но и её инициализация:

var a = 10

Инициализация означает, что переменная запущена в работу, ей присвоено начальное значение, она инициализирована. Без присвоения начального значения переменная просто объявлена, а с начальным значением она еще и инициализирована.

Во втором случае, когда переменная объявлена без начального значения, т.е. она еще не инициализирована, не готова полностью к работе.

var b: Int

Три действия — объявление, определение, инициализация

Таким образом, мы имеем здесь три действия — объявление, определение и инициализацию. Их можно записать в одном выражении:

var a: Int = 10

Но, как мы помним, Swift рекомендует экономить время, если есть значение, он может самостоятельно определить тип данных.

И еще, обратите внимание, что голого объявления переменной не может быть. Должно быть обязательно объявление с какой-то второй операцией — или с присвоением значения или с определением типа данных значения. И можно применять сразу три действия, но нельзя только одно, т.е. больше можно, меньше нельзя.

Ковбойская история

Разницу между этими тремя действиями можно проиллюстрировать с помощью шуточного примера, найденного на просторах интернета и немного подредактированного))

Итак, в бар входит в ковбой и требует выпивку — это объявление, декларация намерений.

Бармен спрашивает — чем будешь платить: деньгами, отдашь пистолет или отработаешь мытьем посуды? — Я заплачу, — отвечает ковбой, — у меня есть деньги. — Это определение типа данных.

Тогда плати 5 баксов и получай выпивку — Ковбой платит и веселье начинается — Это инициализация, присвоение начального значения, запуск процесса в работу.

Заметка

Обратите внимание, что мы используем выражение «тип данных» и по отношению к значению, и по отношению к переменным и константам. Дело в том, что в программировании по большому счета можно практически все называть типом данных. Это и объекты, и классы, и наиболее нам известные Int, String, Double, Bool и т.д.
Но, чтобы как-то все же отличать типы данных значений от констант и переменных будем называть последние некими сущностями, элементами языка программирования. Тогда у нас будут типы данных для значений и типы данных для определенных элементов программирования (к которым относятся в том числе константы и переменные).

Автор: Максим Савостьянов

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *