【Go自学第五节】Go中函数切片传递与指针传递

本文探讨了Go语言中函数传递切片与切片指针的区别。虽然对切片内容的修改会影响底层数组,但当切片扩容时,若不使用指针传递,函数内外的切片会指向不同的数组,导致函数内修改无法影响到函数外。通过实例展示了切片扩容时,仅通过切片传递无法改变函数外切片的指向,而切片指针传递则可以实现修改。
摘要由CSDN通过智能技术生成

今天在复习Go函数时遇到这样的一个描述

在Go中,切片的本质是一个结构体,包含一个指向底层数组的指针(prt),长度(len),容量(cap)。所以,切片本身包含一个指针,将切片按值传递给函数,在函数内对其修改,影响将会传递到函数外。因为底层的数组被修改了。
但当对切片进行append()操作,若是元素数量超过原有切片的容量,将会使得切片容量增大,这就是问题所在。扩容后的切片,本质上是产生一个新的底层数组。如果在函数内对切片添加元素导致扩容,会导致元素内的切片指向一个新的数组,但是函数外的切片仍然指向原来旧的数组,则将会导致影响无法传递到函数外。如果希望函数内对切片扩容作用于函数外,就需要以指针形式传递切片。

于是具有实践精神的我就想要了解函数的切片传递与指针传递究竟有什么区别,并且为什么 如果希望函数内对切片扩容作用于函数外,就需要以指针形式传递切片。


切片

在开始之前,我们首先了解Go中的切片是一种特殊的数据结构,他基于底层的数组实现。

切片结构体:

type slice struct {
    array unsafe.Pointer
    len   int
    cap   int
}

 他由指向底层数组的指针、长度len、和容量cap组成。

更多切片和数组相关知识点请看

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Weber77

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值