📜  Golang 中的指针(1)

📅  最后修改于: 2023-12-03 15:15:23.326000             🧑  作者: Mango

Golang 中的指针

指针是一种特殊的变量,它存储了一个变量的内存地址。在 Golang 中,可以通过使用 & 操作符来获取一个变量的地址,使用 * 操作符来获取指针所指向的变量的值。

创建指针

Golang 中的指针可以使用 new 函数创建,该函数会在堆上分配一块内存,并返回该内存地址的指针。下面是一个示例:

package main

func main() {
    var ptr *int
    ptr = new(int)
    *ptr = 42
    println(*ptr)
}

在上面的示例中,我们创建了一个 int 类型的指针 ptr,然后通过 new 函数在堆上分配了一块内存,并将其地址赋值给 ptr。然后,我们使用 * 操作符将 42 赋值给指针所指向的变量,并使用 println 函数输出指针所指向的变量的值。

获取指针所指向的值

在 Golang 中,可以使用 * 操作符来获取指针所指向的值。下面是一个示例:

package main

func main() {
    var a int = 42
    var ptr *int = &a
    println(*ptr)
}

在上面的示例中,我们创建了一个 int 类型的变量 a,并将其赋值为 42。然后,我们创建了一个 int 类型的指针 ptr,并将 a 的地址赋值给 ptr。最后,我们使用 * 操作符获取 ptr 所指向的值,并使用 println 函数输出该值。

修改指针所指向的值

在 Golang 中,可以通过指针来修改其所指向的值。下面是一个示例:

package main

func main() {
    var a int = 42
    var ptr *int = &a
    println(*ptr)
    *ptr = 100
    println(*ptr)
}

在上面的示例中,我们创建了一个 int 类型的变量 a,并将其赋值为 42。然后,我们创建了一个 int 类型的指针 ptr,并将 a 的地址赋值给 ptr。然后,我们将 *ptr 的值修改为 100,并使用 println 函数输出该值。

nil 指针

在 Golang 中,未经初始化的指针会被默认赋值为 nil,表示该指针并不指向任何有效的内存地址。下面是一个示例:

package main

func main() {
    var ptr *int
    if ptr == nil {
        println("ptr is nil")
    }
}

在上面的示例中,我们创建了一个 int 类型的指针 ptr,由于未对其进行初始化,ptr 的值为 nil。我们使用 if 语句判断 ptr 是否为 nil,如果是,则输出一条消息。

指针作为函数参数

在 Golang 中,可以将指针作为函数参数来传递变量的引用,从而实现函数内部对变量的修改。下面是一个示例:

package main

func increment(ptr *int) {
    *ptr++
}

func main() {
    var count int = 0
    increment(&count)
    increment(&count)
    println(count)
}

在上面的示例中,我们创建了一个 int 类型的变量 count,并初始化其值为 0。然后,我们定义了一个名为 increment 的函数,该函数接收一个 int 类型的指针,用于增加该指针所指向变量的值。最后,我们通过 increment 函数两次增加 count 变量的值,并使用 println 函数输出最终结果。

总结

本文介绍了 Golang 中的指针的基本概念、创建指针、获取指针所指向的值、修改指针所指向的值、nil 指针以及指针作为函数参数等相关知识。指针是 Golang 中非常重要的概念,熟练掌握指针的使用可以帮助程序员更好地理解和设计程序。