Go 语言中,函数的参数传递--值传递

在 Go 语言中,函数的参数传递是值传递的方式。当函数被调用时,函数参数的值会被拷贝到函数的参数变量中。

对于指针类型的参数,指针本身也是以值的方式进行传递。这意味着函数内部的指针参数将获得原始指针的拷贝,但这个拷贝仍然指向相同的内存地址。

当在函数内部修改通过指针传递的变量时,由于指针本身是值传递的,原始指针的拷贝在函数内部会指向同一块内存地址,因此对指针所指的变量的修改将反映在函数外部。

下面是一个示例代码,演示了指针参数的值传递:

go
func modifyPointer(ptr *int) {
    *ptr = 42
}

func main() {
    var value int = 10
    fmt.Println("Before:", value) // 输出: Before: 10

    modifyPointer(&value)
    fmt.Println("After:", value) // 输出: After: 42
}

在上述示例中,modifyPointer 函数接受一个指向整型的指针作为参数,并将指针所指的变量修改为 42。在 main 函数中,我们声明了一个整型变量 value,然后通过 &value 将其地址传递给 modifyPointer函数。当函数执行完毕后,value 的值已经被修改为 42

总结起来,虽然指针本身是通过值传递的方式进行传递,但是通过指针可以修改函数外部的变量,因为指针拷贝后仍然指向相同的内存地址。这使得我们可以在函数内部修改通过指针传递的变量。

posted @ 2023-12-04 15:45  若-飞  阅读(149)  评论(0)    收藏  举报