go语言nil空切片及一般空切片

//nil空切片和空切片不一样。nil空切片引用数组指针地址为0(无指向任何实际地址)

//空切片的引用数组指针地址是有的,且固定为一个值,即所有的空切片指向的数组引用地址都是一样的

//切片之间是不能相互比较的,我们不能用==操作符来判断两个切片是否含有全部相同元素

//切片唯一合法的比较操作是与nil比较,一个nil值的切片并没有底层数组,长度和容量都是0,没有申请内存

//但注意,我们不能说一个长度和容量都是0的切片就一定是nil

package main

//nil空切片和空切片不一样。nil空切片引用数组指针地址为0(无指向任何实际地址)
//空切片的引用数组指针地址是有的,且固定为一个值,即所有的空切片指向的数组引用地址都是一样的

import "fmt"

//切片之间是不能相互比较的,我们不能用==操作符来判断两个切片是否含有全部相同元素
//切片唯一合法的比较操作是与nil比较,一个nil值的切片并没有底层数组,长度和容量都是0
//但注意,我们不能说一个长度和容量都是0的切片就一定是nil
func main() {

	var a []int         //没有底层数组,nil切片,没有申请内存
	b := []int{}        //有底层数组,但长度和宽度均为0,空切片
	c := make([]int, 0) //空切片

	if a == nil {
		fmt.Printf("a为nil\n") //只有这个输出
	}
	if b == nil {
		fmt.Printf("b为nil")
	}
	if c == nil {
		fmt.Printf("c为nil")
	}
	//要判断一个切片是空,应该用len(s)==0判断,而不应该用s==nil

	//切片是引用传递,和数组不一样,切片把管理权也给了,即一起管理同一个数组
	d := make([]int, 3) //空切片[0,0,0]
	fmt.Println(d)
	e := d //e与d共用一个底层数组,e的值变了,d也跟着变
	e[0] = 100
	fmt.Println(d[0]) //对e修改值,d切片的值也一起变
	fmt.Println(e[0])

	//遍历切片,像数组那样
	for index, e := range e {
		fmt.Println(index, e)

	}

}

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

76博ding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值