数组与切片
数组
- 数组是值类型。取地址&变量名;
- 数组的第一个元素的地址,就是数组的地址;
- 数组的每个元素的地址间隔是依据数组的类型决定,比如int64-》8 interweb2-》4
四种数组初始化方式
var numsArray01 [3]int = [3]int{1, 2, 3}
var numsArray02 = [3]int{1, 2, 3}
var numsArray03 = [...]int{1, 2, 3}
var numsArray04 = [3]string{1: "tom", 0: "jack", 2: "cc"}
fmt.Println(numsArray01)
fmt.Println(numsArray02)
fmt.Println(numsArray03)
fmt.Println(numsArray04)
// 循环
for _, value := range numsArray01 {
fmt.Println(value)
}
数组的注意事项和细节
- 数组是多个相同类型数据的组合,一个数组一旦声明/定义了,其长度是固定的,不能动态变化。
- var arr []int 这时arr就是一个slice切片。
- 数组中的元素可以是任何数据类型,包括值类型和引用类型,但不能混用。
- 数组创建后,如果没有赋值,有默认值
- 使用数组的步骤:
- 声明数组并开辟空间
- 给数组各个元素赋值
- 使用数组
- 数组的下标是从0开始的
- 数组下标必须在指定范围内使用,否则报panic:数组越界。
- Go的数组属于值类型,在默认情况下是值传递,因此会进行值拷贝。数组间不会相互影响。
- 如想在其他函数中,去修改原来的数组,可以使用引用传递(指针方式)。
- 长度是数组类型的一部分,在传递函数参数时需要考虑数组的长度。
切片
切片的基本介绍
- 切片的英文是slice
- 切片是数组的一个引用,因此切片是引用类型,在进行传递时,遵守引用传递的机制。
- 切片的使用和数组类似,遍历切片、访问切片的缘故和求切片长度len(slice)都一样。
- 切片的长度时可以变化的,因此切片时一个可以动态变化数组。
- 切片定义的基本语法:var 变量名 []类型
切片使用的三种方式
// 通过数组创建切片
var arr1 = [...]int{1, 2, 3}
var s1 = arr1[0:2]
// make创建切片
// var 切片名 []type = make([]type,len,[cap])
var s2 []int = make([]int, 3, 5)
// 直接赋值
var s3 []int = []int{1, 2, 3}
方式1和方式2的区别(面试)
- 方式1是直接引用数组,这个数组是事先存在的,程序员是可见的。
- 方式2是通过make来创建切片,make也会创建一个数组,是由切片在底层进行维护,程序员是不可见。
string 与 slice
- string底层是一个byte数组,因此string也可以进行切片处理
数组与切片
数组
- 数组是值类型。取地址&变量名;
- 数组的第一个元素的地址,就是数组的地址;
- 数组的每个元素的地址间隔是依据数组的类型决定,比如int64-》8 interweb2-》4
四种数组初始化方式
var numsArray01 [3]int = [3]int{1, 2, 3}
var numsArray02 = [3]int{1, 2, 3}
var numsArray03 = [...]int{1, 2, 3}
var numsArray04 = [3]string{1: "tom", 0: "jack", 2: "cc"}
fmt.Println(numsArray01)
fmt.Println(numsArray02)
fmt.Println(numsArray03)
fmt.Println(numsArray04)
// 循环
for _, value := range numsArray01 {
fmt.Println(value)
}
数组的注意事项和细节
- 数组是多个相同类型数据的组合,一个数组一旦声明/定义了,其长度是固定的,不能动态变化。
- var arr []int 这时arr就是一个slice切片。
- 数组中的元素可以是任何数据类型,包括值类型和引用类型,但不能混用。
- 数组创建后,如果没有赋值,有默认值
- 使用数组的步骤:
- 声明数组并开辟空间
- 给数组各个元素赋值
- 使用数组
- 数组的下标是从0开始的
- 数组下标必须在指定范围内使用,否则报panic:数组越界。
- Go的数组属于值类型,在默认情况下是值传递,因此会进行值拷贝。数组间不会相互影响。
- 如想在其他函数中,去修改原来的数组,可以使用引用传递(指针方式)。
- 长度是数组类型的一部分,在传递函数参数时需要考虑数组的长度。
切片
切片的基本介绍
- 切片的英文是slice
- 切片是数组的一个引用,因此切片是引用类型,在进行传递时,遵守引用传递的机制。
- 切片的使用和数组类似,遍历切片、访问切片的缘故和求切片长度len(slice)都一样。
- 切片的长度时可以变化的,因此切片时一个可以动态变化数组。
- 切片定义的基本语法:var 变量名 []类型
切片使用的三种方式
// 通过数组创建切片
var arr1 = [...]int{1, 2, 3}
var s1 = arr1[0:2]
// make创建切片
// var 切片名 []type = make([]type,len,[cap])
var s2 []int = make([]int, 3, 5)
// 直接赋值
var s3 []int = []int{1, 2, 3}
方式1和方式2的区别(面试)
- 方式1是直接引用数组,这个数组是事先存在的,程序员是可见的。
- 方式2是通过make来创建切片,make也会创建一个数组,是由切片在底层进行维护,程序员是不可见。
string 与 slice
- string底层是一个byte数组,因此string也可以进行切片处理