golang中的数组
1. 数组的声明
package main
import "fmt"
func main() {
// 数组:定长且元素类型一致的数据集合
// 方式一:先声明在赋值,声明时内存中已经开辟了空间
var nums [3]int // 内存中已开辟空间,初始化的值是0
nums[0] = 999
nums[1] = 666
nums[2] = 333
fmt.Println(&nums, nums)
fmt.Printf("%p\n", &nums)
// 方式二:声明+赋值
names := [2]string{"ma", "ya"}
fmt.Println(names)
// 方式三:声明+赋值+指定位置
var ages = [3]int{1: 22, 0: 87, 2: 99}
fmt.Println(ages)
// 方式四:省略个数
str1 := [...]string{0: "hahah", 2: "hehad"}
fmt.Println(str1)
// 声明指针类型的数组(指针类型),不会开辟内存初始化数组中的值,numbers=nil
var numbers *[3]int
// 声明数组并初始化,返回的是指针类型的数组(指针类型)
numbers2 := new([3]int)
fmt.Println(numbers, numbers2)
}
2. 数组内存管理

package main
import "fmt"
func main() {
nums := [3]int32{11, 22, 33}
fmt.Printf("数组的内存地址:%p\n", &nums)
fmt.Printf("数组的第一个元素的内存地址:%p\n", &nums[0])
fmt.Printf("数组的第一个元素的内存地址:%p\n", &nums[1])
fmt.Printf("数组的第一个元素的内存地址:%p\n", &nums[2])
names := [2]string{"沛齐", "alex"}
fmt.Printf("字符串数组的内存地址:%p\n", &names)
fmt.Printf("字符串数组的内存地址:%p\n", &names[0])
fmt.Printf("字符串数组的内存地址:%p\n", &names[1])
}
3. 数组的可变和拷贝
package main
import "fmt"
func main() {
// 数组的可变和拷贝
// 可变,数组的元素可以被更改,长度和类型都不可以被修改
names := [2]string{"武沛齐", "alex"}
names[1] = "袁浩"
fmt.Println(names)
// 注意:字符串不可以被修改
// 拷贝,变量赋值时重新拷贝一份
name1 := [2]string{"武沛齐", "alex"}
name2 := name1
name1[1] = "袁浩"
fmt.Println(name1, name2)
}
4. 数组的长度、索引、切片、循环
package main
import "fmt"
func main() {
// 长度、索引、切片、循环
name := [2]string{"武沛齐", "alex"}
// 1. 长度
fmt.Println(len(name))
// 2. 索引
fmt.Println(name[0])
name[0] = "eric"
fmt.Println(name)
// 3. 切片
nums := [3]int{11, 22, 33}
data := nums[:2] // 获取 0<=下标<2
fmt.Println(data)
// 4. 手动循环
for i := 0; i < len(nums); i++ {
fmt.Println(i, nums[i])
}
// 5. for range 循环
for index, item := range nums {
fmt.Println(index, item)
}
for index := range nums {
fmt.Println(index)
}
for _, item := range nums {
fmt.Println(item)
}
}
5. 数组的嵌套
package main
import "fmt"
func main() {
// 数组嵌套
var nestData [2][3]int
nestData[0] = [3]int{11, 22, 33}
nestData[1][1] = 88
fmt.Println(nestData)
nestData2 := [2][3]int{{11, 22, 33}, {4, 5, 6}}
fmt.Println(nestData2)
}

浙公网安备 33010602011771号