📌  相关文章
📜  golang 中的指针 - Go 编程语言 - Go 编程语言(1)

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

Golang 中的指针

Golang 中的指针和其他语言中的指针类似,都是一种存储变量内存地址的变量。在 Golang 中,指针是一种值类型。

指针变量定义的基本规则如下:

var ptr *int

这里定义了一个名为 ptr 的指针变量,可以存储 int 类型变量的地址。Golang 中的所有数据类型(例如整数、浮点数、布尔值、字符串、指针等)都有对应的指针类型。

取指针

可以使用 & 符号取变量的地址,例如:

var a int = 10
var ptr *int

ptr = &a

这里定义了一个整数类型的变量 a,并使用 & 符号取其地址,然后将地址赋值给指针变量 ptr

操作指针
访问指针所指向的变量

可以使用 * 符号从指针中取值,例如:

fmt.Println(*ptr)

这里使用 * 符号从指针 ptr 中取值,输出指针所指向的变量 a 的值 10

修改指针所指向的变量

可以使用 * 符号修改指针所指向的变量的值,例如:

*ptr = 20
fmt.Println(a)

这里使用 * 符号修改指针所指向的变量 a 的值为 20,然后输出变量 a 的值,结果为 20

指针作为函数参数

指针可以作为函数参数传递,从而能够在函数内部修改外部变量的值。例如:

func swap(a *int, b *int) {
    var tmp int
    tmp = *a
    *a = *b
    *b = tmp
}

func main() {
    var x int = 10
    var y int = 20

    fmt.Println("交换前 x 的值为:", x)
    fmt.Println("交换前 y 的值为:", y)

    swap(&x, &y)

    fmt.Println("交换后 x 的值为:", x)
    fmt.Println("交换后 y 的值为:", y)
}

这里定义了一个 swap 函数,接收两个指针类型的参数 ab,然后交换指针所指向变量的值。在 main 函数中定义了两个变量 xy,并将其地址传递给函数 swap,最后输出交换后的结果。

指针数组

指针数组是一个包含指针的数组。在 Golang 中,可以使用数组名来获取指针数组的第一个元素的地址。例如:

var a = []int{1, 2, 3, 4, 5}
var ptr [5]*int

for i := 0; i < len(a); i++ {
    ptr[i] = &a[i]
}

for i := 0; i < len(a); i++ {
    fmt.Println(*ptr[i])
}

这里定义了一个整数类型的数组 a,然后定义了一个指针数组 ptr。在循环中将数组元素的地址存储到指针数组中,最后输出指针所指向的变量的值。

以上就是 Golang 中指针的基本用法,希望对你有所帮助。