码迷,mamicode.com
首页 > 编程语言 > 详细

go 语言学习 - 数组和切片

时间:2018-08-26 18:19:59      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:unsafe   需要   运算   imp   [1]   情况   hang   pack   实用   

package main

import "fmt"

func main(){

	//数组
	var a = [3]int{}//相当于[3]int{0,0,0}
	a[0] = 1
	changeArray(a)
	fmt.Println(a)

	b := [...]int{1,2,3}//省略号符号表示让编译器根据后面初始化情况自动计算数组的长度,但这个长度是编译时确定的
	fmt.Println(b)

	c := new([3]int)  //new 返回的是地址,但是一样可以用 pointName[index] 访问,但是输出时需要取地址对应的值
	c[1] = 17  //这里和 (*c)[1] 等效 , 但不象 c 一样支持指针运算,除非使用 unsafe 模块
	fmt.Println(*c)

    /////////////////////////////////////////////////////////////

	//切片
	d := []int{0,0,0} //跟数组类似,但不指定长度
	d[0] = 1
	fmt.Println(d)

	e := make([]int,5,10) //make 只能创建 slice,map,chanel,且返回引用,new 可以创建任何类型,返回地址
	e[1] = 12
	fmt.Println(e)
	changeSlice(e)
	fmt.Println(e)

	f := *new([]int) // new 可以创建任何类型并返回地址,但不能用参数指定大小,这个方法非常不常用
	f = append(f,1,2,3)
	fmt.Println(f)

	g := c[:]  //基于数组创建切片,这个方法非常简单实用[:] 表示所有元素还可以用 [m:] [:n] [m:n]
	//对数组的一次切片操作后即返回切片
	fmt.Println(g)
}

// 数组是传值引用,因此函数对数组的修改不影响原值 而且[3]int 和 [4]int 是不同的类型
// 如果必须要改变数组的值,需求明确指定传递数组的指针
// 例如这里用 changeArray(x *[3]int) , 调用时用 changeArray(&a)
func changeArray(x [3]int){
	x[1] = 100
}

//切片传的是引用,因此函数对切片的修改影响原值
func changeSlice(x []int){
	x[1] = 100
}

go 语言学习 - 数组和切片

标签:unsafe   需要   运算   imp   [1]   情况   hang   pack   实用   

原文地址:https://www.cnblogs.com/scala/p/9537649.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!