go切片基本概念

一 切片的引入

先看一个实际需求:我们需要一个数组用于保存学生的成绩,但是学生的个数是不确定的,怎么办?

解决方案:使用切片。

二 切片的基本介绍

1 切片的英文是 slice。

2 切片是数组的一个引用,因此切片是引用类型,在进行传递时,遵守引用传递的机制。

3 切片的使用和数组类似,遍历切片、访问切片的元素和求切片长度 len(slice)都一样。

4 切片的长度是可以变化的,因此切片是一个可以动态变化数组。

5 切片定义的基本语法。

var 切片名 []类型
var a [] int

三 快速入门

1 代码

package main

import (
   "fmt"
)

func main() {
   // 演示切片的基本使用
   var intArr [5]int = [...]int{1, 22, 33, 66, 99}
   // 声明/定义一个切片
   // slice := intArr[1:3]
   // 1 slice 就是切片名
   // 2 intArr[1:3] 表示 slice 引用到 intArr 这个数组
   // 3 引用 intArr 数组的起始下标为 1,最后的下标为3(但是不包含3)
   slice := intArr[1:3]
   fmt.Println("intArr=", intArr)
   fmt.Println("slice 的元素是 =", slice)       // 22, 33
   fmt.Println("slice 的元素个数 =", len(slice)) // 2
   fmt.Println("slice 的容量 =", cap(slice))   // 切片的容量是可以动态变化
   fmt.Printf("intArr[1]的地址=%p\n", &intArr[1])
   fmt.Printf("slice[0]的地址=%p slice[0]==%v\n", &slice[0], slice[0])
   slice[1] = 34
   fmt.Println()
   fmt.Println("intArr=", intArr)
   fmt.Println("slice=", slice) //  22, 34
}

2 测试

intArr= [1 22 33 66 99]
slice 的元素是 = [22 33]
slice 的元素个数 = 2
slice 的容量 = 4
intArr[1]的地址=0xc04206e038
slice[0]的地址=0xc04206e038 slice[0]==22

intArr= [1 22 34 66 99]
slice= [22 34]

Process finished with exit code 0

四 切片在内存中形式

1 切片内存布局

2 分析总结

a slice 是一个引用类型

b slice 从底层来说,其实就是一个 struct 结构体。

type slice struct {
    ptr *[2]int
    len int
    cap int
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值