加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

指针 – 在Golang错误中从一个指针转换为指针类型到另一个指针

发布时间:2020-12-16 19:29:17 所属栏目:大数据 来源:网络整理
导读:任何人都可以告诉我为什么这不会编译? package maintype myint intfunc 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 )} 我的推理到目前为止是这样
任何人都可以告诉我为什么这不会编译?
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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读