博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
go语言学习一 - 数组和切片
阅读量:5326 次
发布时间:2019-06-14

本文共 1368 字,大约阅读时间需要 4 分钟。

package mainimport "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}

package mainimport "fmt"func main() {	v := 3	p := &v	fmt.Println(v) //3	fmt.Println(p) //0xc042050080	changeV(p)	changeP(p)	fmt.Println(v) //10	fmt.Println(p) //0xc042050080}//将一个变量的地址以传值的方式传入函数,虽然传递的是地址副本但指向的地址却不是副本仍是原址//所以对它的修改会影响到变量的值func changeV(p *int)  {	*p = 10}//而修改指针本身,由于传入的是指针变量的副本,所以对它的修改不会影响到原指针变量的指向func changeP(p *int)  {	p = new(int)}

转载于:https://www.cnblogs.com/scala/p/9537649.html

你可能感兴趣的文章
freebsd 实现 tab 命令 补全 命令 提示
查看>>
struts1和struts2的区别
查看>>
函数之匿名函数
查看>>
shell习题第16题:查用户
查看>>
Redis常用命令
查看>>
2018.11.06 bzoj1040: [ZJOI2008]骑士(树形dp)
查看>>
2019.02.15 bzoj5210: 最大连通子块和(链分治+ddp)
查看>>
redis cluster 集群资料
查看>>
微软职位内部推荐-Sr. SE - Office incubation
查看>>
微软职位内部推荐-SOFTWARE ENGINEER II
查看>>
centos系统python2.7更新到3.5
查看>>
C#类与结构体究竟谁快——各种函数调用模式速度评测
查看>>
我到底要选择一种什么样的生活方式,度过这一辈子呢:人生自由与职业发展方向(下)...
查看>>
poj 题目分类
查看>>
windows 安装yaml支持和pytest支持等
查看>>
读书笔记:季羡林关于如何做研究学问的心得
查看>>
面向对象的优点
查看>>
套接口和I/O通信
查看>>
阿里巴巴面试之利用两个int值实现读写锁
查看>>
浅谈性能测试
查看>>