go语言深入了解切片1.18版本

package main

import "fmt"

func main() {
	a := []string{"无极剑圣0", "阿尔法突袭1", "高原血统2", "双重打击3", "冥想4"}
	b := a[1:3]
	for i := 0; i < len(a); i++ {
		fmt.Printf("%v%p\n", a[i], &a[i])
	}
	fmt.Println("-----我是河蟹----")
	for i := 0; i < len(a); i++ {
		fmt.Printf("%v%p\n", b[i], &b[i])
	}

}

输出

无极剑圣00xc000058050
阿尔法突袭10xc000058060                                                     
高原血统20xc000058070                                                       
双重打击30xc000058080                                                       
冥想40xc000058090                                                           
-----我是河蟹----                                                           
阿尔法突袭10xc000058060                                                     
高原血统20xc000058070        

我们发现,a中的“阿尔法突袭,高原血统“和b中的“阿尔法突袭,高原血统“的地址相同,故a和b他们用的是同一份,类似于,易大师说的,你的剑就是我的剑,它们2个相互影响同心同德住在同一个房子里,下面的例子也能证明这点

package main

import "fmt"

func main() {
	a := []string{"无极剑圣0", "阿尔法突袭1", "高原血统2", "双重打击3", "冥想4"}
	b := a[1:3]
	a[1] = "d惩戒" //看这里只添加了这个
	b[1] = "f闪现" //看这里只添加了这个
	for i := 0; i < len(a); i++ {
		fmt.Printf("%v%p\n", a[i], &a[i])
	}
	fmt.Println("-----我是河蟹----")
	for i := 0; i < len(b); i++ {
		fmt.Printf("%v%p\n", b[i], &b[i])
	}


}

输出

无极剑圣00xc000058050
d惩戒0xc000058060    
f闪现0xc000058070    
双重打击30xc000058080
冥想40xc000058090    
-----我是河蟹----    
d惩戒0xc000058060    
f闪现0xc000058070    

要是a和b一直这样生活下去那该多好,但是b的要求无法得到满足,b一直在增加欲望

package main

import "fmt"

func main() {
	a := []string{"无极剑圣0", "阿尔法突袭1", "高原血统2", "双重打击3", "冥想4"}
	b := a[1:3]
	a[1] = "d惩戒" 
	b[1] = "f闪现" 
	b = append(b, "先锋之眼")//看这里只添加了这个
	b = append(b, "侦察守位")//看这里只添加了这个

	for i := 0; i < len(a); i++ {
		fmt.Printf("%v%p\n", a[i], &a[i])
	}
	fmt.Println("-----我是河蟹----")
	for i := 0; i < len(b); i++ {
		fmt.Printf("%v%p\n", b[i], &b[i])
	}
	fmt.Printf("a的长度%v容量%v\n", len(a), cap(a))//看这里只添加了这个
	fmt.Printf("b的长度%v容量%v\n", len(b), cap(b))//看这里只添加了这个

}


输出

无极剑圣00xc0000d6000
d惩戒0xc0000d6010   
f闪现0xc0000d6020   
先锋之眼0xc0000d6030
侦察守位0xc0000d6040
-----我是河蟹----   
d惩戒0xc0000d6010   
f闪现0xc0000d6020   
先锋之眼0xc0000d6030
侦察守位0xc0000d6040
a的长度5容量5       
b的长度4容量4       


可以发现a和b的地址依然用的是同一个,但a的宽容已经到极限了

package main

import "fmt"

func main() {
	a := []string{"无极剑圣0", "阿尔法突袭1", "高原血统2", "双重打击3", "冥想4"}
	b := a[1:3]
	a[1] = "d惩戒" 
	b[1] = "f闪现" 
	b = append(b, "先锋之眼")
	b = append(b, "侦察守位")
	b = append(b, "神谕透镜")//看这里只添加了这个
	for i := 0; i < len(a); i++ {
		fmt.Printf("%v%p\n", a[i], &a[i])
	}
	fmt.Println("-----我是河蟹----")
	for i := 0; i < len(b); i++ {
		fmt.Printf("%v%p\n", b[i], &b[i])
	}
	fmt.Printf("a的长度%v容量%v\n", len(a), cap(a))
	fmt.Printf("b的长度%v容量%v\n", len(b), cap(b))

}

输出

无极剑圣00xc000058050
d惩戒0xc000058060   
f闪现0xc000058070   
先锋之眼0xc000058080
侦察守位0xc000058090
-----我是河蟹----   
d惩戒0xc000110000   
f闪现0xc000110010   
先锋之眼0xc000110020
侦察守位0xc000110030
神谕透镜0xc000110040
a的长度5容量5       
b的长度5容量8    

此时你发现a和b的地址是完全不同了,已经分开了,因为a的心再也放不下b了,b自己搬出来了,开辟了另一片地址,此时你再去改a或者b他们已经不会互相影响了,如下面的代码

package main

import "fmt"

func main() {
	a := []string{"无极剑圣0", "阿尔法突袭1", "高原血统2", "双重打击3", "冥想4"}
	b := a[1:3]
	a[1] = "d惩戒"
	b[1] = "f闪现"
	b = append(b, "先锋之眼")
	b = append(b, "侦察守位")
	b = append(b, "神谕透镜")
	a[1] = "无尽之刃"//添加了这里
	b[1] = "灭世者的死亡之帽"//添加了这里
	for i := 0; i < len(a); i++ {
		fmt.Printf("%v%p\n", a[i], &a[i])
	}
	fmt.Println("-----我是河蟹----")
	for i := 0; i < len(b); i++ {
		fmt.Printf("%v%p\n", b[i], &b[i])
	}
	fmt.Printf("a的长度%v容量%v\n", len(a), cap(a))
	fmt.Printf("b的长度%v容量%v\n", len(b), cap(b))

}

输出

无极剑圣00xc000058050
无尽之刃0xc000058060        
f闪现0xc000058070           
先锋之眼0xc000058080        
侦察守位0xc000058090        
-----我是河蟹----           
d惩戒0xc000110000           
灭世者的死亡之帽0xc000110010
先锋之眼0xc000110020        
侦察守位0xc000110030        
神谕透镜0xc000110040        
a的长度5容量5               
b的长度5容量8     

你们说如果把b里面的”神谕透镜“删除,a和b还能破镜重圆,回到过去吗

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值