在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)-无法将&ktype **int转换type **myint

type **inttype **myint是未命名的指针类型及其指针的基本类型,type *inttype *myint没有相同的基础类型。

如果T(*int*myint)是指针类型文字,则相应的基础类型是T本身。

(*myint)(k)-可以将ktype *int转换type *myint

type *inttype *myint是未命名的指针类型,它们的指针基本类型type inttype myinttype myint int)具有相同的基础类型。

如果T(int)是预声明的类型,则对应的基础类型是T本身。如果T(myint)既不是预声明的类型也不是类型文字,则T的基础类型是T在其类型声明(type myint int)中引用的类型的基础类型

(myint)(*k)-可以将*ktype int转换type myint

type inttype 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

基础类型的intT1T2int基础类型的*T1T3T4*T1

参考文献:

Go编程语言规范

转换次数

种类

类型和值的属性

类型声明

预声明的标识符

指针类型

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Golang中将一个指针转换为另一种类型

类型的指针指向另一个的指针

将子对象指针转换为基类(从另一个名称空间)指针

将函数指针强制转换为C中的另一个函数指针是否安全?

在C ++中,如何在没有dynamic_cast的情况下将子类实例从一个基类指针转换为另一个基类指针?

将一个指针的值存储在 Rust 中的另一个指针中

将指针从一个函数传递到另一个函数

类型转换为一个指向int的指针。

将一定数量的字符从一个指针复制到另一个指针

链表中的点是否代表节点或从一个节点到另一个节点的指针?

从一个类型的对象转换为另一个不同类型的对象

将结构体指针转换为另一个结构体

将指针从一个函数传递到另一个函数会返回一个地址,但访问该地址会导致分段错误

从C ++中的另一个线程读取指针

结构中的指针指向另一个结构

指向另一个类中的对象的指针?

将int指针转换为void指针并返回以在另一个函数中使用该值?

指向另一个指针(间接级别)的指针?

为什么将“this”指针直接传递给存档错误,但另一个相同类型的指针可以?

在 groovy 中将时间从一个时区转换为另一个时区

将数据框从一个转换为另一个

将列表从一个类转换为另一个类

将值从一个javascript函数转换为另一个

将时间从一个时区转换为另一个时区

为什么在C ++中可以将一个类的指针强制转换为另一类的指针?

在C#中从一个数组转换为另一个数组

从另一个函数中的指针检索值时出现分段错误

在另一个类中初始化一个指针

指针的切片到类型的切片到另一个的切片之间的Golang类型转换