go语言中数组或数组切片作为形参时的传递方式和结果

问题描述

1、在go语言中当函数的参数为数组或数组切片时,形参的方式应该怎么确定?
2、不同形式的实参和形参造成的结果有何不同(会否对原数组或切片内容产生改变)?

情况设定及结论

原内容(数组/切片)实参形式形参形式传递方式在函数内对原内容操作结果说明
array := [5]int{1, 2, 3, 4, 5}arrayarray [5]int值传递原内容未改变传入时复制了一个数组副本
array := [5]int{1, 2, 3, 4, 5}array[0:]array []int(类似)引用传递原内容可发生改变传入时数组切片化了
array := []int{1, 2, 3, 4, 5}arrayarray []int引用传递原内容可发生改变传入了切片的指针(注:经验证,二维切片同方法)

相关代码

情况一:

package main

import "fmt"

func modify(array [5]int) {
	array[0] = 10
	fmt.Println("In modify(), array values:", array)
}

func main() {
	array := [5]int{1, 2, 3, 4, 5} //这是一个数组
	modify(array)
	fmt.Println("In main(), array values:", array)
}

运行结果:
In modify(), array values: [10 2 3 4 5]
In main(), array values: [1 2 3 4 5]

情况二:

package main

import "fmt"

func modify(array []int) {
	array[0] = 10
	fmt.Println("In modify(), array values:", array)
}

func main() {
	array := [5]int{1, 2, 3, 4, 5}
	modify(array[0:])
	fmt.Println("In main(), array values:", array)
}

运行结果:
In modify(), array values: [10 2 3 4 5]
In main(), array values: [10 2 3 4 5]

情况三:

package main

import "fmt"

func modify(array []int) {
	array[0] = 10
	fmt.Println("In modify(), array values:", array)
}

func main() {
	array := []int{1, 2, 3, 4, 5}
	modify(array)
	fmt.Println("In main(), array values:", array)
}

运行结果:
In modify(), array values: [10 2 3 4 5]
In main(), array values: [10 2 3 4 5]

###脚注
生成一个脚注1.

目录

[TOC]来生成目录:


  1. 这里是 脚注内容. ↩︎

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值