Go语言学习笔记:2指针 切片

(一)指针:

1.每个变量在运行时都拥有一个地址,这个地址代表变量在内存中的位置

B = 10
A := &B

        总结: 取地址操作符&和取值操作符*是一对互补操作符,&取出地址,*根据地址取出地址指向的值。

2.指针传值

func mod1(x int) {
	x = 5
}//未传值

func mod2(y *int) {
	*y = 10
}//传值

func main() {
	a := 1
	mod1(a)
	fmt.Println(a) // 1

	mod2(&a)
	fmt.Println(a) // 10
}

(二)切片:

1.基本语法声:

var name []T

                name:变量名

                T:切片类型  

func main() {
	var (
		x = []bool{false, true} //声明一个布尔切片并初始化
		y []string              //声明一个字符串切片
		z = []int{}             //声明了一个整型切片并初始化

	)
	fmt.Println(x)        //[false true]
	fmt.Println(y)        //[]
	fmt.Println(z)        //[]
	fmt.Println(x == nil) //false
	fmt.Println(y == nil) //true
	fmt.Println(z == nil) //false
	//fmt.Println(x==y)//切片是引用类型,不支持直接比较,只能和nil比较
}

                   切片可以通过使用内置的len()函数求长度,cap()函数求切片的容量。

2.切片赋值拷贝

                  下面的代码中演示了拷贝前后两个变量共享底层数组,对一个切片的修改会影响另一个

                 切片的内容,这点需要特别注意。

func main() {
	s1 := make([]int, 3) //[0 0 0]
	s2 := s1             //将s1直接赋值给s2,s1和s2共用一个底层数组
	s2[0] = 100
	fmt.Println(s1) //[100 0 0]
	fmt.Println(s2) //[100 0 0]
}

3.切片遍历

        切片的遍历方式和数组是一致的,支持索引遍历和for range遍历。

func main() {
	s := []int{1, 3, 5}

	for i := 0; i < len(s); i++ {
		fmt.Println(i, s[i])
	}

	for index, value := range s {
		fmt.Println(index, value)
	}
}

4.切片的增加与复制和删除

        Go语言的内建函数append()可以为切片动态添加元素。 可以一次添加一个元素,可以添加多

        个元素,也可以添加另一个切片中的元素(后面加…)。

func main(){
	var s []int
	s = append(s, 1)        // [1]
	s = append(s, 2, 3, 4)  // [1 2 3 4]
	s2 := []int{5, 6, 7}  
	s = append(s, s2...)    // [1 2 3 4 5 6 7]
}

        注意:通过var声明的零值切片可以在append()函数直接使用,无需初始化。

var s []int
s = append(s, 1, 2, 3)

        复制切片Go语言内建的copy()函数可以迅速地将一个切片的数据复制到另外一个切片空间中

func main() {
	// copy()复制切片
	a := []int{1, 2, 3, 4, 5}
	c := make([]int, 5, 5)
	copy(c, a)     //使用copy()函数将切片a中的元素复制到切片c
	fmt.Println(a) //[1 2 3 4 5]
	fmt.Println(c) //[1 2 3 4 5]
	c[0] = 1000
	fmt.Println(a) //[1 2 3 4 5]
	fmt.Println(c) //[1000 2 3 4 5]//不干扰a切片
}

go语言内没有删除切片元素的方法但可以使用特性来删除(a = append(a[:index], a[index+1:]...)

func main() {
	// 从切片中删除元素
	a := []int{0, 1, 2, 3, 4, 5, 6, 7}
	// 要删除索引为5的元素
	a = append(a[:5], a[6:]...)
	fmt.Println(a) //[0 1 2 3 4 6 7]
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值