Go数组:定义及初始化结构体数组多维数组数组和指针数组的定义及初始化
func main(){
var a [4]int//按数组长度⾃动初始化为0
var aa [4]int=[4]int{1,2,3,4}
var aaa =[4]int{1,2,3,4}//定义并初始化
b :=[4]int{2,5}//按数组长度,没有初始化的⾃动初始化为0
c :=[4]int{5,3:10}
/*[...]int是数组  []int是切⽚*/
e :=[...]int{10,2:100}//指定索引位置⾃动初始化0。2:初始化为1个0
d :=[...]int{1,2,3}//按初始值数量⾃定义数组长度
fmt.Println(a)//[0 0 0 0]
fmt.Println(aa)//[1 2 3 4]
fmt.Println(aaa)//[1 2 3 4]
fmt.Println(b)//[2 5 0 0]
fmt.Println(c)//[5 0 0 10]
fmt.Println(e)//[10 0 100]
fmt.Println(d)//[1 2 3]
}
结构体数组
type user struct{
name string
age  byte//char
}
func main(){
d :=[2]user{{"tom",20},{"marry",18}}
fmt.Println(d)
fmt.Printf("%v\n", d)//相应值的默认格式。
fmt.Printf("%+v\n",d)//打印结构体时,会添加字段名
fmt.Printf("%#v",  d)//相应值的Go语法表⽰
}
输出
[{tom 20} {marry 18}]
[{tom 20} {marry 18}]
[{name:tom age:20} {name:marry age:18}]
[2]main.user{main.user{name:"tom", age:0x14}, main.user{name:"marry",  age:0x12}}
多维数组
⽤分层的⽅式来写多维数组,清晰明了,在这种情况下,n维可以看做⼀维数组下的n-1维数组
a :=[2][2]int{{1,2},{3,4}}//⼆维数组
/*[...]只能⽤在第⼀维数组中*/
b :=[...][2]int{//⼆维数组
{1,2},
3:{3,4},
}//每⼀个元素⽤逗号隔开
c :=[...][2][2]int{//三维数组
{
{1,2},
{3,4},
},
{
{5,6},
{7,8},
},
}//按b,c的初始化⽅法,最后⼀个元素的后也要加逗号,
fmt.Printf("%v\n%v\n%v", a, b, c)
}
[[1 2] [3 4]]
[[1 2] [0 0] [0 0] [3 4]]
[[[1 2] [3 4]] [[5 6] [7 8]]]
注:内置函数len()和cap()⽤来返回第⼀维的长度,如:len(b)=4,cap(c)=2 2.
数组和指针
1.指针数组基础
在go中数组名不代表数组的⾸地址
1)%T表⽰相应值的类型的Go语法表⽰
2)%T表⽰相应值的类型的Go语法表⽰
3)%p⼗六进制表⽰,前缀 0x
func main(){
x, y :=10,20
a :=[...]*int{&x,&y}//定义指针数组,其中的各个元素为指针
p :=&a                //指向指针数组的指针
fmt.Printf("%T\n", a)//数组a的类型和长度
fmt.Printf("%v\n", a)//数组内的指针元素
fmt.Printf("%T\n", p)//p的类型,p是指向数组地址的指针一维数组的定义和初始化
fmt.Printf("%p\n", p)//输出变量p的地址,实际上就是数组a的地址
fmt.Printf("%v\n", p)//输出p的值,即指针数组的地址
fmt.Printf("%v\n",*p)//输出p中的值,即指针数组
fmt.Printf("%p\n",&p)//输出指针p的地址
}
[2]*int
[0xc00000c1c8 0xc00000c1e0]
*[2]*int
0xc0000481f0
&[0xc00000c1c8 0xc00000c1e0]
[0xc00000c1c8 0xc00000c1e0]
0xc000006028
2.数组指针可直接⽤来操作元素
a :=[...]int{1,2}
p :=&a
p[1]+=10
fmt.Println(p[1])
}
输出:12
3.可以获取任意元素的地址
func main(){
a :=[...]int{1,2}//定义⼀个整型数组
fmt.Println(&a,&a[0],&a[1])//说明了数组名不是数组的⾸地址}
&[1 2]    0xc00000c1e0    0xc00000c1e8

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。