面试题答案
一键面试值传递和指针传递特点与应用场景
- 值传递
- 特点:在值传递时,函数接收的是实参值的副本。对形参的修改不会影响到函数外部的实参。
- 应用场景:当传递的数据量较小,且函数内部不需要修改调用者传入的原始数据时,使用值传递。这样可以避免不必要的指针操作带来的复杂性,提高代码的可读性。例如,在对基本数据类型(如
int
、float
、string
等)进行传递时,值传递简单直接。
- 指针传递
- 特点:指针传递时,函数接收的是实参的内存地址。通过该地址,函数可以直接修改函数外部的实参值。
- 应用场景:当需要在函数内部修改调用者传入的数据,或者传递的数据量较大时,使用指针传递可以避免数据的大量拷贝,提高效率。例如,在操作大型结构体时,使用指针传递可以减少内存开销。
示例代码
package main
import "fmt"
// 值传递函数
func valuePass(num int) {
num = num * 2
fmt.Printf("值传递函数内 num 的值: %d\n", num)
}
// 指针传递函数
func pointerPass(num *int) {
*num = *num * 2
fmt.Printf("指针传递函数内 num 指针指向的值: %d\n", *num)
}
你可以使用以下方式调用这两个函数:
func main() {
num := 10
fmt.Printf("初始 num 的值: %d\n", num)
valuePass(num)
fmt.Printf("值传递后 num 的值: %d\n", num)
pointerPass(&num)
fmt.Printf("指针传递后 num 的值: %d\n", num)
}
在上述代码中,valuePass
函数使用值传递,函数内部对 num
的修改不会影响到外部的 num
。而 pointerPass
函数使用指针传递,函数内部通过指针修改了外部 num
的值。