MST

星途 面试题库

面试题:Go函数调用中的值传递与指针传递

在Go语言中,函数调用时的值传递和指针传递有什么区别?请举例说明这两种传递方式对函数参数修改后,在函数外部的表现。
15.3万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. 值传递
    • 概念:值传递是指在函数调用时,将实际参数的值复制一份传递给函数的形式参数。在函数内部对形式参数的修改不会影响到函数外部的实际参数。
    • 示例
package main

import "fmt"

func modifyValue(num int) {
    num = num + 10
    fmt.Println("函数内部修改后 num 的值:", num)
}

func main() {
    num := 5
    modifyValue(num)
    fmt.Println("函数外部 num 的值:", num)
}

在上述代码中,modifyValue函数接收一个int类型的参数num,在函数内部对num进行加10操作,但是函数外部的num值并没有改变。

  1. 指针传递
    • 概念:指针传递是指在函数调用时,将实际参数的地址传递给函数的形式参数。这样在函数内部通过指针可以直接修改函数外部变量的值。
    • 示例
package main

import "fmt"

func modifyPointer(num *int) {
    *num = *num + 10
    fmt.Println("函数内部修改后 *num 的值:", *num)
}

func main() {
    num := 5
    modifyPointer(&num)
    fmt.Println("函数外部 num 的值:", num)
}

在这个代码中,modifyPointer函数接收一个int类型指针num,在函数内部通过解引用指针修改了指针指向的值,函数外部的num值也随之改变。

总结来说,值传递传递的是值的副本,函数内修改不影响外部;指针传递传递的是地址,函数内可通过指针修改外部变量的值。