📅  最后修改于: 2023-12-03 15:15:23.289000             🧑  作者: Mango
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
函数,接收两个指针类型的参数 a
和 b
,然后交换指针所指向变量的值。在 main
函数中定义了两个变量 x
和 y
,并将其地址传递给函数 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 中指针的基本用法,希望对你有所帮助。