p = &a;
правильно. - Назначение адреса a
указателю p
.
q = p;
неверно (конфликт типов). - Вы пытаетесь назначить указатель (*
) указателю на указатель (**
). Он должен быть q = &p
, чтобы вы получили адрес p
и назначили его указателю на указатель q
.
b = *q;
неверно (конфликт типов). - Вы пытаетесь назначить указатель (*q
прирост p
) объекту int
. Это должно быть b = **q;
, чтобы присвоить значение a
b
.
Если бы вы скомпилировали этот код с помощью современного компилятора, совместимого со стандартами, он бы показал вам все конфликты и, вероятно, ответил бы на большинство ваших вопросов.
В следующий раз перед публикацией попробуйте выполнить свой код с помощью компилятора, такого как G CC или Clang, и посмотрите, что он сообщает вам с помощью c сообщений диагностики.
Если вы не хотите устанавливать пакет компилятора или IDE на свой компьютер, хотя и настоятельно рекомендуется, вы можете скомпилировать его онлайн с помощью Godbolt или OnlineGDB .
Компилятор - ваш лучший друг в поиске синтаксических проблем c. Особенно, если вы используете еще больше вспомогательных флагов, таких как -Wall
, -Wextra
и -Werror
. : -)