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

切片数组文字

切片数组文字

Go
慕无忌1623718 2022-05-18 09:34:20
我相信 Go 规范存在一个小问题。以下抱怨数组文字不可寻址:    print([4]int{2,3}[:2])我知道为什么从函数返回的数组是不可寻址的(例如错误寻址函数的返回切片),但为什么数组字面量像[4]int{2,3}不可寻址?特别是当切片和字符串文字是 - 例如这些工作正常:    print([]int{2,3,0,0}[:2])    print("2300"[:2])此外,数组文字似乎是可寻址的,因为&[4]int{42,43}它是一个有效的表达式。我知道我可以用一片    print([]int{2,3,0,0}[:2])但是,如果我希望容量(数组长度)成为编译时常量怎么办。    const maxLength = 4    ...    print([maxLength]int{2,3}[:2])是的,我可以分配给一个临时数组变量,但我为什么需要呢?
查看完整描述

1 回答

?
白衣非少年

TA贡献1155条经验 获得超0个赞

使用以下内容:

fmt.Println((&[4]int{2, 3})[:2])

规范说明了切片表达式

如果切片操作数是一个数组,它必须是可寻址的。

这与可寻址性有关

操作数必须是可寻址的,即变量、指针间接或切片索引操作;或可寻址结构操作数的字段选择器;或可寻址数组的数组索引操作。作为可寻址性要求的一个例外,x 也可以是(可能带括号的)复合文字。

该数组是不可寻址的,但复合文字异常可用于获取可寻址值。

数组操作数必须是可寻址的,因为结果切片的元素是可寻址的。字符串操作数不需要是可寻址的,因为字符串元素永远不可寻址。


查看完整回答
反对 回复 2022-05-18
  • 1 回答
  • 0 关注
  • 88 浏览
慕课专栏
更多

添加回答

举报

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