指针赋值通过解引用修改原始变量,如*p = 20会改变x的值;函数传参时传递指针可直接修改原变量;但指针本身重新指向(如p2 = nil)不影响原始数据。

在Go语言中,指针赋值会影响原始变量,但关键在于你如何使用这个指针。
指针赋值的本质
当你把一个变量的地址赋给指针时,这个指针就指向了该变量的内存位置。之后通过指针修改值,会直接改变原始变量的内容。
例如:
x := 10 p := &x // p 指向 x 的地址 *p = 20 // 通过指针修改值 fmt.Println(x) // 输出 20
这里 *p = 20 实际上修改了 x 所在的内存,所以 x 的值变成了 20。
立即学习“go语言免费学习笔记(深入)”;
函数传参中的指针影响
当把指针作为参数传递给函数时,函数内部可以通过指针修改原始变量。
示例:
func modify(p *int) {
*p = 100
}
x := 5
modify(&x)
fmt.Println(x) // 输出 100
函数 modify 接收的是 x 的地址,因此对 *p 的赋值直接影响了 x。
指针赋值本身不会自动传播修改
如果你只是将一个指针赋值给另一个指针,它们会指向同一个变量,但后续对指针本身的重新指向不会影响原始变量。
比如:
x := 10 p1 := &x p2 := p1 // p2 也指向 x *p2 = 30 // 修改,x 变成 30 p2 = nil // p2 被设为 nil,p1 和 x 不受影响
此时 p2 = nil 只是让 p2 不再指向任何地方,并不会改变 x 或 p1。
基本上就这些:只要是对指针解引用后赋值(即 *ptr = value),就会改原始变量;而只是改变指针的指向,不会影响原始数据。理解这一点,就能准确控制何时影响、何时隔离。










