登录
首页 >  Golang >  Go教程

Golang指针赋值会改原变量吗

时间:2025-10-03 22:16:29 298浏览 收藏

**Golang指针赋值会改变原变量吗?深入理解指针的本质与应用**。在Go语言中,指针赋值是否会改变原变量,取决于如何使用指针。本文通过实例解析,明确指出通过解引用指针修改值(如`*p = 20`)会直接改变原始变量的值。函数传参时,传递指针也能在函数内部修改外部变量。然而,指针本身的重新指向(例如`p2 = nil`)并不会影响原始数据。理解指针赋值的本质,能帮助开发者更精准地控制变量修改,避免潜在的程序错误。掌握Go语言指针的这一特性,对于编写高效、可维护的代码至关重要。

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

Golang指针赋值会影响原始变量吗

在Go语言中,指针赋值会影响原始变量,但关键在于你如何使用这个指针。

指针赋值的本质

当你把一个变量的地址赋给指针时,这个指针就指向了该变量的内存位置。之后通过指针修改值,会直接改变原始变量的内容。

例如:

x := 10
p := &x  // p 指向 x 的地址
*p = 20  // 通过指针修改值
fmt.Println(x) // 输出 20

这里 *p = 20 实际上修改了 x 所在的内存,所以 x 的值变成了 20。

函数传参中的指针影响

当把指针作为参数传递给函数时,函数内部可以通过指针修改原始变量。

示例:

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 不再指向任何地方,并不会改变 xp1

基本上就这些:只要是对指针解引用后赋值(即 *ptr = value),就会改原始变量;而只是改变指针的指向,不会影响原始数据。理解这一点,就能准确控制何时影响、何时隔离。

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>