• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

GO-数组与切片

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

一.数组的定义

//var 变量名 [数组的容量]类型 = [数组的容量]类型{值1,值2}
var a [4]int = [4]int{1,2,3}
或者
var a = [4]int{1,2,3}
或者
a := [4]int{1,2,3}
//这几个的结果为[1 2 3 0]


//接受长度有赋值的长度决定
package main

import "fmt"

func main(){
	var a  = [...]int{1,2,3}
    //a :=[...]int{1,2,3}
    //但是无法使用var a [...]int = [...]int{1,2,3}
    //只能var a [3]int = [...]int{1,2,3}
	fmt.Println(a)
}
//结果为[1 2 3]

二.切片的定义

var a []int = []int{1,2,3}
或者
var a = []int{1,2,3}
或者
a := []int{1,2,3}


//另外种方式用make创建
var a []int=make([]int,4,6) //长度4,容量6  
var a []int=make([]int,4)  //长度4,容量4

//只定义,没有赋值,空值是nil类型
func main(){
	var a []int
	if a ==nil{
		fmt.Println("我是空的")
	}
}


//切片全部取值
for i,v:=range  切片对象{
	fmt.Println(i)  //索引
	fmt.Println(v)  //值
}

三.关于数组与切片之间的转换以及原理

转换

//如果有数组a := [4]int{1,2,3,4}

//我们要取第二个
b :=a[1]

//取第二个和第三个
b :=a[1,3]

//取第二个到最后一个
b :=a[1:]

//此时切片的b的长度由切区数组的个数决定
//此时切片的b的容量由切区数组从切的位置到数组末尾位置

补充

  • 长度:len()
  • 容量:cap()

原理

数组变成索引其实切片就相当于创建了一个索引指向数组

四.关于切片与数组之间发生变化

情况一:当切片和数组未发生数据增加

切片或者数组里值发生变化,其对应数组或者切片均会受到影响

情况二:当切片发生数据增加(未超过容量)

比如

package main
import "fmt"

func main(){
	a := [3]int{1,2,3}
	var b = a[1:2]
	b= append(b,33)
	fmt.Println(a,b)
}
//打印结果[1 2 33] [2 33]
//两个会相互受影响

情况三:当切片发生数据增加(超过容量)

package main
import "fmt"

func main(){
	a := [3]int{1,2,3}
	var b = a[1:2]
	b= append(b,33,3)
	fmt.Println(a,b)
}
//打印结果[1 2 3] [2 33 3]
//两个不会受影响
//其实他底层发生了这样一件事件
//如果超过定长,底层会重新复制切片那一段数据且容量为原先的两倍
//而此时切片b的所有指向的位置也发送改变改变为新开辟出来的那段数据

五.灵魂画师画,情况三变化过程


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Go & SQLite on Windows发布时间:2022-07-10
下一篇:
GO学习-(38)Go语言结构体转map[string]interface{}的若干方法发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap