指针 – 在Golang错误中从一个指针转换为指针类型到另一个指针
任何人都可以告诉我为什么这不会编译?
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 Conversions Types Properties of types and values Type declarations Predeclared identifiers Pointer Type (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |