go语言中切片做函数参数的问题

go语言中切片是引用传递的,所以可以在函数中修改切片的值,但在树的遍历中可能遇到如下问题

测试代码
package main

import "fmt"

type TreeNode struct {
	 value int
	 leftNode *TreeNode
	 rightNode *TreeNode
}
//test1
func testSilce(num []int) {
	num[0] = -1
}
//test2
//树的前序遍历
func preorder(root *TreeNode, result *[]int) {
	if root == nil {
		return
	}
	preorder(root.leftNode, result)
	*result = append(*result, root.value)
	//打印地址
	fmt.Printf("%p\n", result)
	preorder(root.rightNode, result)
}
//test3
func preorder2(root *TreeNode, result []int) {
	if root == nil {
		return
	}
	preorder2(root.leftNode, result)
	result = append(result, root.value)
	fmt.Printf("%p\n", &result)
	preorder2(root.rightNode, result)
}

func main() {
	//test1
	fmt.Println("test1========")
	var num []int
	num = append(num, 1)
	num = append(num, 2)
	fmt.Println(num)
	testSilce(num)
	//证明切片为引用传递,num中值已经被修改
	fmt.Println(num)

	//test2
	var root TreeNode
	var left TreeNode
	var right TreeNode
	root.value = 10
	left.value = 11
	right.value = 12
	root.leftNode = &left
	root.rightNode = &right

	var result []int
	fmt.Println("test2========")
	preorder(&root, &result)
	fmt.Println(result)

	//test3
	fmt.Println("test3========")
	var result2 []int
	preorder2(&root, result2)
	fmt.Println(result2)
}

代码运行结果

下面结果,主要看test2和test3,如果不进行指针传递的话。每次树的递归操作,返回的result切片的地址都不同,相当于每次都产生了新的切片。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值