谁能告诉我为什么不能编译?
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
)转换为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
)中引用的类型的基础类型。
这是来自Types部分的基础类型示例,将其修改为使用整数和int指针。
type T1 int
type T2 T1
type T3 *T1
type T4 T3
基础类型的int
,T1
和T2
是int
。基础类型的*T1
,T3
和T4
是*T1
。
参考文献:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句