先传值再传指针
传递参数时,首先我们来看一种常见的方式——先传值再传指针。在这种情况下,我们首先传递一个值类型的参数,然后通过指针来修改该值。这种方式适用于需要修改参数值的场景。 在Golang中,对于值类型的参数,函数接收的是该参数的一个拷贝,所以在函数体内对参数进行修改并不会影响到原始的参数。但是,如果我们传递参数的指针,就能够在函数内部修改指针所指向的值,从而改变原始参数的值。 示例代码如下:func setValue(value int) {
value = 10
}
func setPointer(pointer *int) {
*pointer = 10
}
在上述示例中,setValue函数接收一个整型参数,并将该参数的值设为10。setPointer函数接收一个整型指针参数,并通过指针来修改原始参数的值。 使用示例代码如下:func main() {
value := 5
pointer := &value
fmt.Println("Before setValue:", value) // 输出: Before setValue: 5
setValue(value)
fmt.Println("After setValue:", value) // 输出: After setValue: 5
fmt.Println("Before setPointer:", value) // 输出: Before setPointer: 5
setPointer(pointer)
fmt.Println("After setPointer:", value) // 输出: After setPointer: 10
}
从上述示例的输出结果可以看出,通过传递值类型的参数并不能修改原始参数的值,但是通过传递指针参数却能够成功修改原始参数的值。先传指针再传值
除了先传值再传指针,Golang中还有一种方式——先传指针再传值。在这种情况下,我们首先传递一个指针类型的参数,然后通过值来操作该指针。这种方式适用于需要判断或者访问指针所指向值的场景。 在Golang中,对于指针类型的参数,函数接收的是该指针的一个拷贝,也就是说,传递的是指针的地址的拷贝。虽然函数内部无法修改原始指针的值,但是可以通过该指针来访问和修改指针所指向的值。 示例代码如下:func getValue(pointer *int) {
fmt.Println("Value:", *pointer)
}
在上述示例中,getValue函数接收一个整型指针参数,并通过该指针打印出指针所指向的值。 使用示例代码如下:func main() {
value := 10
pointer := &value
fmt.Println("Before getValue:", value) // 输出: Before getValue: 10
getValue(pointer)
fmt.Println("After getValue:", value) // 输出: After getValue: 10
}
从上述示例的输出结果可以看出,通过传递指针类型的参数可以访问指针所指向的值,但是无法修改原始指针的值。