内存地址通过&
package main
import "fmt"
func main() {
var arr [2][3]int16
fmt.Println(arr)
fmt.Printf("arr的地址是: %p \n", &arr)
fmt.Printf("arr[0]的地址是 %p \n", &arr[0])
fmt.Printf("arr[0][0]的地址是 %p \n", &arr[0][0])
fmt.Printf("arr[1]的地址是 %p \n", &arr[1])
fmt.Printf("arr[1][0]的地址是 %p \n", &arr[1][0])
//赋值
arr[0][0] = 47
arr[0][1] = 23
arr[1][1] = 45
fmt.Println(arr)
var arr4 [3][3]int = [3][3]int{{1, 2, 4}, {5, 8, 9}}
fmt.Println(arr4)
for key, value := range arr4 {
for k, v := range value {
fmt.Println("arr[%v][%v]=%v", key, k, v)
}
}
fmt.Println()
fmt.Println("=========")
for i := 0; i < len(arr4); i++ {
for j := 0; j < len(arr4[i]); j++ {
fmt.Print(arr4[i][j], "\t")
}
fmt.Println()
}
}
普通for循环和建值循环
array的内存分析
地址*2 int16
改数组里面的值是通过指针
package main
import "fmt"
func main() {
//实现的功能 给出5个学生的成绩,求出成绩的总和,平局数
score1 := 95
score2 := 85
score3 := 75
score4 := 65
score5 := 55
sum := score3 + score5 + score4 + score1 + score2
avg := sum / 5
fmt.Println(avg)
//150个学生
//遍历数组:依次获取数组中的数据range 数组名:index,value
var scores [5]int
scores[0] = 95
scores[1] = 85
scores[2] = 77
scores[3] = 33
scores[4] = 66
sumscor := 0
for i := 0; i < len(scores); i++ {
sumscor += scores[i]
}
avgs := sumscor / len(scores)
fmt.Println(avgs)
fmt.Println("打印数组-->>", scores)
fmt.Printf("打印数组的地址 %p", &scores)
fmt.Printf("打印数组的第1个地址 %p", &scores[0])
fmt.Printf("打印数组的第2个地址 %p", &scores[1])
fmt.Println()
fmt.Println("<<<======>>>")
//数组初始数据
arr := [...]int{6, 2, 3, 4, 5}
var arrs1 = [3]int{1, 2, 3}
fmt.Println(arrs1)
var arrs02 [3]int = [3]int{2, 6, 9}
fmt.Println(arrs02)
var arr4 = [...]int{2: 66, 0: 1, 3: 44}
fmt.Println(arr4)
for i := 0; i < len(arr); i++ {
fmt.Print(arr[i], "\t")
}
//如果数组长度不确定,可以使用 ... 代替数组的长度,编译器会根据元素个数自行推断数组的长度:
//数组初始数据
for i := 0; i < 10; i++ {
//arr.
}
//range
sumrr := 0
//对字符串 数组都可以遍历
for _, value := range arr {
fmt.Println(value)
sumrr += value
}
fmt.Println(sumrr)
var scorsnum [5]int
for i := 0; i < len(scorsnum); i++ {
fmt.Println("开始录入")
//录入值改变上边的值用&
fmt.Scanln(&scorsnum[i])
}
fmt.Println(scorsnum)
}
package main
import "fmt"
func main() {
var arr1 = [3]int{3, 6, 9}
fmt.Printf("数组的类型 %T", arr1)
var arr2 = [4]int{3, 6, 9, 5}
fmt.Printf("数组的类型 %T", arr2)
var arr3 = [3]int{3, 6, 9}
test1(&arr3)
fmt.Println(arr3)
arr3[0] = 8
fmt.Println(arr3)
}
//通过指针可以改数组的值
func test1(arr *[3]int) {
(*arr)[0] = 7
}
二维数组内存分析
slice切片构建在数组之上的
package main
import "fmt"
func main() {
var intarr [6]int = [6]int{1, 2, 3, 4, 5, 6}
//切片是构建在数组之上的
//[]动态变化的数组长度不写,int 类型 intarr是原数组
//[1:3]切片 -切出的一段片段 - 索引:从1开始 到3结束
slice := intarr[1:3]
fmt.Println("intarr", intarr)
fmt.Println("slice", slice)
//切片元素个数
fmt.Println("slice元素个数:", len(slice))
//获取切片的容量,容量可以动态变化
fmt.Println("slice的容量:", cap(slice))
}
切片和数组的地址是相同的
func main() {
var intarr [6]int = [6]int{1, 2, 3, 4, 5, 6}
//切片是构建在数组之上的
//[]动态变化的数组长度不写,int 类型 intarr是原数组
//[1:3]切片 -切出的一段片段 - 索引:从1开始 到3结束
slice := intarr[1:3]
fmt.Println("intarr", intarr)
fmt.Println("slice", slice)
//切片元素个数
fmt.Println("slice元素个数:", len(slice))
//获取切片的容量,容量可以动态变化
fmt.Println("slice的容量:", cap(slice))
fmt.Printf("数组中下标为1位置的地址 %p", &intarr[1])
fmt.Printf("切片中下标为0位置的地址 %p", &slice[0])
slice[1] = 16
fmt.Println("intarr:", intarr)
}
切片的定义
切片可以动态扩容
切片的拷贝
//定义切片
var a []int = []int{1, 2, 3, 45}
//
var b []int = make([]int, 10)
//拷贝
//将a中的对应数组元素赋值到b中对应的数组中
copy(b, a)
fmt.Println(b)
map
map创建的方式
//只声明map内存是没有分配空间
//必须通过make函数进行初始化,才会分配空间
var a map[int]string
//map 可以存放10个键值对
a = make(map[int]string, 10)
a[200901] = "账上"
a[200902] = "tom"
fmt.Println(a)
b := make(map[int]string)
b[200901] = "账上"
b[200902] = "tom"
c := map[int]string{
200901: "toms",
200902: "too",
}
c[200] = "tt"
map增删改查
package main
import "fmt"
func printMap(cityMap map[string]string) {
//cityMap 是一个引用传递
for key, value := range cityMap {
fmt.Println("key = ", key)
fmt.Println("value = ", value)
}
}
func ChangeValue(cityMap map[string]string) {
cityMap["England"] = "London"
}
func main() {
cityMap := make(map[string]string)
//添加
cityMap["China"] = "Beijing"
cityMap["Japan"] = "Tokyo"
cityMap["USA"] = "NewYork"
//遍历
printMap(cityMap)
//删除
delete(cityMap, "China")
//修改
cityMap["USA"] = "DC"
ChangeValue(cityMap)
fmt.Println("-------")
//遍历
printMap(cityMap)
}