go语言(5)数组和切片

  • 数组
    1.数组定义:var 数组名 [数组大小] 数组类型
 var a [5]int

2.(1)数组的地址可以通过数组名来获取:&a
(2)数组第一个元素的地址就是数组的首地址
3.数组初始化的四种方式
在这里插入图片描述
4.for-range遍历数组

for index,value:=range array01{
}

(1)第一个返回值index是数组的下标
(2)第二个value是在该下标位置的值
(3)array01是数组名
5.数组创建后,如果没有赋值,有默认值。
数值(整数系列,浮点数系列):0
字符串数组:""
bool数组:默认值为false
6.go的数组属值类型,在默认情况下是值传递,因此会进行值拷贝。数组间不会相互影响。如果想在其他函数中修改数组,可以使用引用传递。

package main
import (
	"fmt"
)
func test1(arr [3]int){
	arr[0]=5
}
//参数为指向数组的指针
func test2(arr *[3]int) {
	(*arr)[0]=5
}
func main(){
	arr:=[3]int{1,2,3}
	fmt.Println(arr)
	test1(arr)
	fmt.Println(arr)
	test2(&arr)
	fmt.Println(arr)
}

[1 2 3]
[1 2 3]
[5 2 3]

  • 二维数组
    1.定义
var arr [4][6]int

在这里插入图片描述
&arr2[0]与&arr2[0][0]相同
2.初始化
在这里插入图片描述
在这里插入图片描述

  • 切片
    1.切片是一个数组的引用,因此切片是引用类型,在进行传递时,遵守引用传递的机制。
    2.切片的长度是可以变化的,因此切片是一个可以变化动态数组。
    3.切片定义:var 切片名 []类型
    var a []int

4.切片使用的三种方式:
(1)定义一个切片,然后让切片引用一个已经创建好的数组。

func main(){
	arr:=[...]int{1,2,3,4,5}
	var slice=arr[1:3]//下标从1到3,但不包含3
	fmt.Println(arr)
	fmt.Println(slice)
}

结果:
[1 2 3 4 5]
[2 3]
内存图:
在这里插入图片描述

(2)通过make来创建切片
var 切片名 []类型=make([]类型,len,cap)
类型是数据类型,len为大小,cap为切片容量。
cap可选,如果分配了cap,则要求cap>=len

func main(){
	var slice []float64=make([]float64,5,10)
	slice[1]=10
	slice[3]=20
	fmt.Println(slice)
}

[0 10 0 20 0]
如果没有给切片的各个元素赋值,那么就会使用默认值;通过make方式创建的切片对应的数组是由make底层维护,对外不可见,即只能通过slice去访问各个元素。
内存图:
在这里插入图片描述

(3)定义一个切片,直接指定具体数组

func main(){
	var slice []float64=[]float64{1,2,3}
	fmt.Println(slice)
}

[1 2 3]
5.var slice =arr[0:end]可以简写var slice =arr[:end];
var slice =arr[start:len(arr)]可以简写为var slice =arr[start:]
var slice =arr[0:len(str)]可以简写为var slice =arr[:]
6.切片可以继续切片
slice1=slice[1:2]
7.用append内置函数,可以实现对切片进行动态追加
在这里插入图片描述
注:slice3=append(slice3,slice4…)中,slice3,slice4的类型只能是切片,…是固定写法,不能省略。
在这里插入图片描述
8.切片的拷贝操作
在这里插入图片描述
注:slice4的切片长度也可以比slice5小。不报错。
9.切片是引用类型,所以在传递时,遵守引用传递机制。
10.string和slice:
(1)string底层是一个byte数组,因此string也可以进行切片处理。

func main(){
	str:="yuanyuan"
	var slice=str[4:]
	fmt.Println(slice)
}

yuan
(2)string是不可变的,也就是说不能通过str[0]='z’方式来修改字符串。如果需要修改字符,可以先将string->[]byte或[]rune,修改后再重新转成string。

package main
import (
	"fmt"
)
func main(){
	str:="yuanyuan"
	arr1:=[]byte(str)
	arr1[0]='c'
	str=string(arr1)
	fmt.Println(str)
}

cuanyuan
注:[]byte用来处理光有数字和字母的字符串,byte是按字节来,如果带有汉字,必须使用[]rune

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值