Go(3[数组])
2023-01-31 02:01:38
数组
数组:var 变量名[len]type
使用场景:
固定需求的时候,使用数组,不可超出指定长度
长度也是数组类型的一部分
底层内存空间是连续的
用来存储常量
数组是一种特殊的字典.....
数组写入,赋值的方式, 数组[索引]=值
数组是值类型,如果copy成另外一个数组,那修改这个数组,原来的数组并不会改变
数组初始化:
定义: var 变量名 [len]type
第一种:
var a[5] int = [5]int{1,2,3,4,5}
第二种:
ceshi :=[5]int{1,3,4,5}
第三种
var b = [5]int{1,3}
第四种(当不可知长度的时候使用 ...),需要注意的是在切片中也有这种用法,不过含义不一样
var c = [...]int{1,3,4,5,10}
示例:
var a[5]int
var a[5]string
var a[5]float32
var a[5]bool
访问数组中的元素:
使用下标访问: a[0]访问第一个元素。长度为5的数组访问如下: a[0], a[1], a[2], a[3], a[4]
数组中的长度:
var a[10]int
lengh :=len(a)
示例代码拆分部分:
数组循环:
格式化%p,用来打印内存地址
& 符号,取变量地址
尽量用变量来循环
var a [10]int for i :=0;i<len(a);i++{ fmt.Printf("%p\n",&a[i]) }
length:=len(a) 数组长度
数组初始化:
定义数组的时候,默认值都是0
产生另外一个数组,修改这个数组,并不会对原数组进行修改
func test2() { var a[5]int = [5]int {1,2,3,4,5} var b[5] int b = a fmt.Printf("%v\n",b) b[0] = 200 fmt.Printf("%v\n",b) fmt.Printf("%v\n",a) }
数组定义:
声明数组的时候,需要定义长度和类型!!!
写法:变量[长度]类型 = [长度]类型[值]
数组赋值:指定下标来指定元素赋值
%#以go的方式打印
var d [5]string = [5]string{1:"abc",4:"zcq"} //%# 以Go的方式打印!!! fmt.Printf("%#%v\n",d) fmt.Printf("%v\n",a,b,c)
二维数组
var a[8][2]int
func test4() { //二维数组 var a[4][2]int for i:=0;i<4;i++{ for j:=0;i<2;j++{ a[i][i] = (i+1) *(j+1) } } for i:=0;i<4;i++{ for j:=0;i<2;j++{ fmt.Printf("%d",a[i][j]) } fmt.Println() } }
数组赋值:随机数字放入数组
切记:go是强类型语言,所以类型如果不一样,是编译不过去的
使用随机数模块,使用time模块
r := rand.New(rand.NewSource(time.Now().Unix())
func test5() { //随机数字放入数组 r := rand.New(rand.NewSource(time.Now().Unix())) var five [100]int //数组 通过索引来赋值 for i:=0;i<len(five);i++{ //赋值操作 five[i]=r.Int() //取值操作 fmt.Printf("%d\n",five[i]) } fmt.Printf("%d\n",five) }
数组赋值:随机字符串放入数组
go里面是utf-8编码
Sprintf 格式化并返回格式化后的字符串,可直接赋值!!!
func test6() { var a [100]string var b string = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" for i:=0;i<len(a);i++{ var str string for j:=0;j<len(b);j++{ index :=rand.Intn(len(b)) //Sprintf 格式化并返回格式化后的字符串 str = fmt.Sprintf("%s%c",str,b[index]) } a[i] = str fmt.Printf("a[%d]=%s\n",i,a[i]) } }
相关文章