网站地图    收藏   

主页 > 后端 > Golang >

golang切片append方法不会改变内存地址

来源:未知    时间:2021-07-24 21:29 作者:小飞侠 阅读:

[导读] 请看测试代码: packagemainimportfmtfuncmain(){vars[]intprintSlice(s)fmt.Printf(%p\n,s)//添加一个空切片s=append(s,0)printSlice(s)fmt.Printf(%p\n,s)//这个切片会按需增长s=append(s,1)printSlice(s)fmt.Printf(%p\n,s)//可以一...

请看测试代码:

package main

import "fmt"

func main() {
	var s []int
	printSlice(s)
	fmt.Printf("%p\n", &s)
	// 添加一个空切片
	s = append(s, 0)
	printSlice(s)
	fmt.Printf("%p\n", &s)

	// 这个切片会按需增长
	s = append(s, 1)
	printSlice(s)
	fmt.Printf("%p\n", &s)

	// 可以一次性添加多个元素
	s = append(s, 2, 3, 4)
	printSlice(s)
	fmt.Printf("%p\n", &s)
}

func printSlice(s []int) {
	fmt.Printf("len=%d cap=%d %v\n", len(s), cap(s), s)
}

返回结果:

len=0 cap=0 []
0xc0000ae018
len=1 cap=1 [0]
0xc0000ae018
len=2 cap=2 [0 1]
0xc0000ae018
len=5 cap=6 [0 1 2 3 4]
0xc0000ae018

由此可见,内存地址并没有改变。

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论