package main type myint int func set(a **myint) { i := myint(5) *a = &i } func main() { var k *int set( (**myint)(&k) ) // cannot convert &k (type **int) to type **myint print( *k ) }
我的推理到目前为止是这样的. Golang中的所有类型都是不同的,但是只要基础类型相同,它就可以使用C类转换语法从一种类型转换为另一种类型.在我的例子中,将’int’转换为’myint’不是问题. ‘* int’到’* myint’也不是.当你有指针指针出现的时候.我现在第二天就被困在了这里.任何帮助是赞赏.
(** myint)(& k) – 无法将& k(type ** int)转换为** myint类型:
键入** int和类型** myint是未命名的指针类型和它们的指针基类型,类型* int和类型* myint,没有相同的底层类型.
如果T(* int或* myint)是指针类型文字,则相应的底层类型是T本身.
(* myint)(k) – 可以将k(type * int)转换为* myint类型:
键入* int和类型* myint是未命名的指针类型和它们的指针基类型,类型为int和类型myint(类型myint int)具有相同的底层类型.
如果T(int)是预先声明的类型,则相应的底层类型是T本身.如果T(myint)既不是预先声明的类型也不是类型文字,T的底层类型是T类型声明中引用的类型的底层类型(type myint int).
(myint)(* k) – 可以将* k(类型int)转换为类型myint:
键入int和类型myint具有相同的底层类型.
如果T(int)是预先声明的类型,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.
参考文献:
The Go Programming Language Specification