a
является int*
, указатель на int
. В первом фрагменте кода, где вы думаете, a
указывает на? Ответ на этот вопрос: a
указывает на случайный местоположение. Используя
*a=5;
Вы разыскиваете указатель и записываете 5 в неправильное расположение памяти. Это вызывает Undefined Behavior, и все может случиться. Если вам повезет, у вас может возникнуть ошибка Segmentation Fault.
Во втором фрагменте кода b
представляет собой целочисленную переменную int
. Память для него предоставляется ОС в стеке. Вы делаете a
указателем на адрес переменной b
. Затем разыменование указателя и запись 5 в это место является действительным, поскольку память выделяется для переменной b
.
«* различные способы инициализации указателя *»: случай 1 не ** ** инициализирует указатель 'a', тогда как в случае 2:' a = & b'. – alk