array go 语言的数组 /切片

内存地址通过&

Go 复制代码
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

改数组里面的值是通过指针

Go 复制代码
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)

}
Go 复制代码
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切片构建在数组之上的

Go 复制代码
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))
}

切片和数组的地址是相同的

Go 复制代码
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)
}

切片的定义

切片可以动态扩容

切片的拷贝

Go 复制代码
//定义切片
	var a []int = []int{1, 2, 3, 45}
	//
	var b []int = make([]int, 10)
	//拷贝
	//将a中的对应数组元素赋值到b中对应的数组中
	copy(b, a)
	fmt.Println(b)

map

map创建的方式

Go 复制代码
	//只声明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增删改查

Go 复制代码
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)
}

map的获取长度和遍历操作

相关推荐
Octopus2077几秒前
【C++】读取数量不定的输入数据
开发语言·c++·笔记·学习
忘梓.几秒前
C嘎嘎探索篇:栈与队列的交响:C++中的结构艺术
c语言·开发语言·c++·
Chris _data12 分钟前
如何提升编程能力第二篇
开发语言·青少年编程
遇到困难睡大觉哈哈12 分钟前
JavaScript面向对象
开发语言·javascript·ecmascript
十五年专注C++开发13 分钟前
C++中的链式操作原理与应用(一)
开发语言·c++·设计模式
我是Superman丶16 分钟前
【前端】js vue 屏蔽BackSpace键删除键导致页面后退的方法
开发语言·前端·javascript
LightOfNight18 分钟前
Redis设计与实现第14章 -- 服务器 总结(命令执行器 serverCron函数 初始化)
服务器·数据库·redis·分布式·后端·缓存·中间件
刽子手发艺27 分钟前
云服务器部署springboot项目、云服务器配置JDK、Tomcat
java·后端·部署
就是有点傻32 分钟前
C#中面试的常见问题006
开发语言·面试·c#·wpf
waves浪游34 分钟前
类和对象(中)
c语言·开发语言·数据结构·c++·算法·链表