go数组用法

go支持数组类型,数组是同一种数据类型元素的集合。
使用时可以修改数组成员,但是数组大小不可变化。

数组的长度必须是常量,并且长度是数组类型的一部分。一旦定义,长度不能变。

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

go数组声明与遍历

代码如下:

package main

import "fmt"

func main() {
	fmt.Println("go array")

	// 方法1 :先声明,后赋值
	var a [3]int
	for i := 0; i < 3; i++ {
		a[i] = i * 100
	}
	fmt.Println(a)

	// 方法2:声明的时候直接赋值,且指明数组长度
	// 声明数组时也可以不用var关键字,例如
	// citys := [3]string{"beijing", "shanghai", "guangzhou"}
	var citys = [3]string{"beijing", "shanghai", "guangzhou"}
	fmt.Println(citys)

	// 方法3:声明时自动推导数组长度
	var nums = [...]int{1, 3, 5, 7}
	fmt.Println(nums)

	// 方法4:指定索引初始化
	// 注意使用这种方法声明数组时,数组的最大索引为指定的最大值,例如,下面的数组,最大索引为5
	var score = [...]int{1: 98, 5: 99}
	fmt.Println(score)

	// 数组长度
	len1 := len(score)
	fmt.Println(len1)

	// 数组遍历
	// 方法1 :for循环
	for i := 0; i < len(score); i++ {
		fmt.Println(score[i])
	}

	// 方法2 :for range
	fmt.Println("------------------------------")
	for index, value := range score {
		fmt.Println(index, value)
	}
	
	// 此时遍历的是索引
	for i := range score {
		fmt.Println(score[i])
	}

	// 二维数组
	// Go语言是支持多维数组的,我们这里以二维数组为例
	// 最后也得加逗号,不然语法错误
	b := [3][2]string{
		{"北京", "故宫"},
		{"上海", "东方明珠"},
		{"武汉", "黄鹤楼"},
	}

	for _, v1 := range b {
		for _, v2 := range v1 {
			fmt.Println("%s\t", v2)
		}
	}

	/*
		    多维数组只有第一层可以使用...来让编译器推导数组长度。例如:
			支持的写法
			a := [...][2]string{
				{"北京", "上海"},
				{"广州", "深圳"},
				{"成都", "重庆"},
			}

			//不支持多维数组的内层使用...
			b := [3][...]string{
				{"北京", "上海"},
				{"广州", "深圳"},
				{"成都", "重庆"},
			}

	*/
}

数组做函数参数

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

数组支持 “==“、”!=” 操作符,因为内存总是被初始化过的。
[n]T表示指针数组,[n]T表示数组指针 。

代码

/*

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

数组支持 “==“、”!=” 操作符,因为内存总是被初始化过的。
[n]*T表示指针数组,*[n]T表示数组指针 。

*/

package main

import "fmt"

func modifyArray(x [3]int) {
	x[0] = 100
}

func modifyArray2(x [3][2]int) {
	x[2][0] = 100
}

func main() {
	a := [3]int{10, 20, 30}
	modifyArray(a) //在modify中修改的是a的副本x
	fmt.Println(a) //[10 20 30]
	b := [3][2]int{
		{1, 1},
		{1, 1},
		{1, 1},
	}
	modifyArray2(b) //在modify中修改的是b的副本x
	fmt.Println(b)  //[[1 1] [1 1] [1 1]]
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值