为了账号安全,请及时绑定邮箱和手机立即绑定

从函数返回语句转到数组切片

从函数返回语句转到数组切片

Go
LEATH 2021-05-07 13:12:53
我具有以下功能:func (c *Class)A()[4]bytefunc B(x []byte)我想打电话B(c.A()[:])但是我得到这个错误:cannot take the address of c.(*Class).A()如何正确获取Go中函数返回的数组切片?
查看完整描述

2 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

的价值c.A(),从方法的返回值,不能寻址。


地址运算符


对于类型T的操作数x,地址操作&x生成指向*的* T类型的指针。操作数必须是可寻址的,即变量,指针间接寻址或切片索引操作;或可寻址结构操作数的字段选择器;或可寻址数组的数组索引操作。除可寻址性要求外,x还可为复合文字。


切片


如果切片的操作数是字符串或切片,则切片操作的结果是相同类型的字符串或切片。如果切片的操作数是数组,则它必须是可寻址的,并且切片操作的结果是与数组具有相同元素类型的切片。


使的值c.A()成为数组,可用于切片操作[:]。例如,将值分配给变量;变量是可寻址的。


例如,


package main


import "fmt"


type Class struct{}


func (c *Class) A() [4]byte { return [4]byte{0, 1, 2, 3} }


func B(x []byte) { fmt.Println("x", x) }


func main() {

    var c Class

    // B(c.A()[:]) // cannot take the address of c.A()

    xa := c.A()

    B(xa[:])

}

输出:


x [0 1 2 3]


查看完整回答
反对 回复 2021-05-10
?
智慧大石

TA贡献1946条经验 获得超3个赞

您是否尝试过将数组首先粘贴到局部变量中?


ary := c.A()

B(ary[:])


查看完整回答
反对 回复 2021-05-10
  • 2 回答
  • 0 关注
  • 231 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信