谁能告诉我为什么无法编译?
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:
(**myint)(&k)
&k
type **int
type **myint
type **int和type **myint是未命名的指针类型及其指针的基本类型,type *int和type *myint并没有相同的基础类型。
type *int
type *myint
如果T(*int或*myint)是指针类型文字,则对应的基础类型是T本身。
*int
*myint
(*myint)(k)-可以将k(type *int)转换为type *myint:
(*myint)(k)
k
type *int和type *myint是未命名的指针类型,它们的指针基本类型type int和type myint(type myint int)具有相同的基础类型。
type int
type myint
type myint int
如果T(int)是预声明的类型,则对应的基础类型是T本身。如果T(myint)既不是预先声明的类型也不是类型文字,则T的基础类型是T在其类型声明(type myint int)中引用的类型的基础类型。
int
myint
(myint)(*k)-可以将*k(type int)转换为type myint:
(myint)(*k)
*k
type int并type myint具有相同的基础类型。
这是来自Types部分的基础类型示例,将其修改为使用整数和int指针。
type T1 int type T2 T1 type T3 *T1 type T4 T3
基础类型的int,T1和T2是int。基础类型的*T1,T3和T4是*T1。
T1
T2
*T1
T3
T4
参考文献:
Go编程语言规范
转换次数
种类
类型和值的属性
类型声明
预声明的标识符
指针类型