Go: 数组与切片

博客介绍了Go语言中数组和切片的相关知识。指出数组是值传递,切片是指针传递,并分别阐述了数组和切片的声明方式。数组声明需指定长度,可初始化;切片声明可不指定大小,还能指定容量,同时给出了基于原数组或切片创建新切片时大小和容量的计算公式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组是值传递,切片是指针传递

一、声明数组:

var n [5]type
//n是一个长度为5的数组

  • 初始化数组:
    n= [5]float32{1000.0,2.0,50.0,7.0,3.4}
    或者
    n :=[5]float32{1000.0,2.0,50.0,7.0,3.4}
    初始化数组中{}中的元素个数不能大于[]中的数字
    或者
    n :=[…]float32{1000.0,2.0,50.0,7.0,3.4}
    忽略数组的长度,编译器自动计算长度
二、声明切片:
  • 通过声明一个未指定大小的数组来定义切片:
    var n []type //切片不需要说明长度
    或者
    var n []int=make([]type,0)可以简写为 n :=make([]type ,0)
    也可以指定容量
    make([]type ,10,20) //指定一个容量为20,长度为10的切片

  • 切片初始化:
    s :=[] int {1,2,3}

  • 我们基于原数组或者切片创建一个新的切片后,那么新的切片的大小和容量是多少呢?这里有个公式,对于底层数组容量是 k 的切片 slice[i:j] 来说
    长度: j-i
    容量: k-i

package main
import "fmt"


func printSlice(x []int){
     fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
}
func main() {
     numbers := []int{0,1,2,3,4,5,6,7,8}
     printSlice(numbers)
     fmt.Println("numbers ==",numbers)
     
     numbers1 := numbers[1:4]
     printSlice(numbers1)
     fmt.Println("numbers[:3] ==", numbers[:3])
     
     numbers2 :=numbers[4:]
     printSlice(numbers2)
     
     numbers3 := make([]int,0,5)
     printSlice(numbers3)
     
     numbers4 := numbers[:2]
     printSlice(numbers4)}

输出结果:

len=9 cap=9 slice=[0 1 2 3 4 5 6 7 8]
numbers == [0 1 2 3 4 5 6 7 8]
len=3 cap=8 slice=[1 2 3]
numbers[:3] == [0 1 2]
len=5 cap=5 slice=[4 5 6 7 8]
len=0 cap=5 slice=[]
len=2 cap=9 slice=[0 1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值