Ответ 1
Вот мой анализ.
(**myint)(&k)
- не может преобразовать &k
(type **int
) в type **myint
:
type **int
и type **myint
являются неназванными типами указателей и их базовыми типами указателей, type *int
и type *myint
, не имеют одинаковых базовых типов.
Если T (*int
или *myint
) является литералом типа указателя, соответствующий базовый тип - сам T.
(*myint)(k)
- может преобразовать k
(type *int
) в type *myint
:
type *int
и type *myint
являются неназванными типами указателей и их базовыми типами указателей, type int
и type myint
(type myint int
), имеют одинаковые базовые типы.
Если T (int
) является предопределенным типом, соответствующий базовый тип - сам T. Если T (myint
) не является запрограммированным типом или литералом типа, базовый тип T является базовым типом типа, к которому T относится к объявлению своего типа (type myint int
).
(myint)(*k)
- может преобразовать *k
(type int
) в type myint
:
type int
и type myint
имеют одинаковые базовые типы.
Если T (int
) является предопределенным типом, соответствующий базовый тип - сам T. Если T (myint
) не является запрограммированным типом или литералом типа, базовый тип T является базовым типом типа, к которому T относится к объявлению своего типа (type myint int
).
Здесь пример базового типа из раздела "Типы" переработан для использования целых чисел и указателей int.
type T1 int
type T2 T1
type T3 *T1
type T4 T3
Основной тип int
, T1
и T2
- int
. Основной тип *T1
, T3
и T4
- *T1
.
Литература:
Спецификация языка программирования Go