Go 数组、切片作为函数的参数。值传递、引用传递

 

demo.go(切片、数组作为函数的形参):

package main

import "fmt"

// 值传递:改变形参的值,并不会改变实参的值。(例如:数组、结构体)
// 地址传递(引用传递):改变形参的值,会影响到实参的值。(例如:切片、map、指针)(切片变量名本身就是一个地址)

// 数组作为函数的参数,是值传递。 修改形参不会改变实参的值。(可以通过返回值来覆盖(修改)实参的值)
// 切片的数据存放在内存的堆区。 数组的数据(函数的局部变量)存放在内存的栈区

func main() {
	// 定义切片。
	slice := []int{0, 1, 2, 3, 4}
	test(slice)
	fmt.Printf("%p \n", slice) // 0xc000072030
	fmt.Println(slice)   // [111 1 2 3 4]  (修改形参会影响到实参)
}

// 切片作为函数的参数(地址传递) (切片变量名本身就是一个地址)
func test(s []int) {
	fmt.Printf("%p \n", s) // 0xc000072030 与实参的地址相同
	s[0] = 111     // 修改形参会影响到实参

	// 但是 append()添加数据时并不会影响实参(的长度)。 (可以通过返回值覆盖(修改)实参的值(长度);或者通过切片的指针修改实参)
	s = append(s, 66,77,88)
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值