学习golang第七天

复合数据类型

数组
Go语言中数组是同一数据类型元素的集合,使用时可以修改数组成员,但是数组大小不可改变。基本语法:

var arr [3]int //定义一个3个元素int类型的数组

数组定义

var 数组变量名 [元素数量]T

比如:var a [5]int,数组长度必须是常量,并且长度是数组类型的一部分,一旦定义长度不能变。[5]int 和[10]int 是不同的类型。

var a [3]int
var b [4]int
a = b // 不可以这样因为a和b是不同类型
package main
import "fmt"
func main(){
    /**
    1.存放元素的容器
    2.必须指定存放元素的类型和容量(长度)
    3.数组的长素是数组类型的一部分
    **/
	var a [3]int
	var b [4]int
	fmt.Printf("a:%T\n b:%T\n" , a ,b)
}

数组可以通过下标进行访问,下标是从0开始,最后一个下标是len-1,访问越界(下标在合法范围之外),则触发访问越界,会panic。

数组的初始化

数组如果不初始化默认都是零值(布尔值:false,整型和浮点型都是0,字符串:" ")。

方法一

var a [3]bool
a = [3]bool{true,true,true}

方法二

//根据初始值自动推算数组的长度
b := [...]int{1,2,3,4,5,6,7,8,9}
var b = [...]int{1,2,3,4,5,6,7,8,9}

方法三

c := [5]int{1,2} //1,2,0,0,0
//根据索引来初始化
d := [5]int(0:1,4:2) //1,0,0,0,2

数组的遍历

package main
import "fmt"
func main(){
	//方法一
	a := [...]string{"hello" , "php" , "go"}
	for i:=0;i<len(a);i++{
		fmt.Println(a[i])
	}
	//方法二
	for k,v:=range a{
		fmt.Printf("k=%s , v=%s\n",k , v )
	}
}

多维数组
Go语言是支持多维数组的,我们这里以二维数组为例

二维数组的定义

package main
import "fmt"
func main(){
	arr := [2][3]string{
		{"beijing" , "shanghai" , "guangzhou"},
		{"henan" , "hebei" , "heilongjiang"}, //最后一个,必须有
	}
	fmt.Println(arr)
	fmt.Println(arr[1][1])
}

多维数组的遍历

package main
import "fmt"
func main(){
	arr := [2][3]string{
		{"北京","上海","广州"}{"河南","河北","山西"},
	}
	for _ , v := range arr{
		for _ , va := range v{
			fmt.Println(va)
		} 
	}
}

数组是值类型
数组是值类型复制和传参会复制整个数组。因此会改变副本的值不会改变本身的值。

package main
import "fmt"
func modifyarr(x [3]int){
	x[0] = 100
}
func modifyarr2(x [3][2]int){
	x[2][0] = 100
}
func main(){
	a := [3]int{10,20,30}
	modifyarr(a)
	fmt.Println(a)
	b := [3][2]int{
		{1,1},
		{1,1},
		{1,1},
	}
	modifyarr2(b)
	fmt.Println(b)
}

注意:
1.数组支持"==","!=",因为内存总是被初始化过的。
2.[n]T表示指针数组,[n]T表示数组指针。

你可能感兴趣的:(学习golang第七天)