golang 中指针的基本操作包括声明、取地址、访问值和修改值。首先,使用 t 声明指针,如 var p int;其次,通过 & 运算符取变量地址并赋值给指针,如 p = &a;接着,使用 p 访问指针指向的值;最后,通过 p = newvalue 修改值。使用 new(t) 可分配初始化的指针内存。操作指针前应确保非 nil,避免崩溃。指针作为函数参数可实现外部变量修改,并提升大对象传递性能。结构体方法也常以指针为接收者,以修改结构体内容。掌握这些操作有助于高效处理内存与数据结构。

在 Golang 中,指针的基本操作主要包括声明、取地址、访问值和修改值。这些操作是使用指针的基础,理解它们有助于更高效地处理内存操作和数据结构。

指针的声明与初始化
要使用指针,首先需要声明它。Golang 的指针声明方式是 *T,其中 T 是指向的数据类型。例如:

var p *int
此时,p 是一个指向 int 类型的指针,但还没有赋值,所以它的值为 nil。可以通过 & 运算符获取变量的地址并赋值给指针:
立即学习“go语言免费学习笔记(深入)”;
a := 10 p = &a
这样,p 就指向了 a 的内存地址。

-
声明时直接赋值也是常见的做法:
p := &a
-
如果你只是想创建一个指针而不想立即赋值,也可以用 new 函数分配内存:
p := new(int)
new 函数会返回一个指向新分配内存的指针,并将其初始化为对应类型的零值。
如何通过指针访问和修改值
有了指针之后,就可以通过 * 运算符来访问或修改指针所指向的值。
fmt.Println(*p) // 输出 a 的值 *p = 20 // 修改 a 的值
上面的例子中,*p 表示访问 p 所指向的值。修改这个值会影响原始变量 a 的内容。
- 多个指针可以指向同一个变量,因此修改其中一个指针指向的值,其他指针也会看到变化。
- 如果你尝试对 nil 指针进行解引用(比如
*p),程序会崩溃,运行时报错:invalid memory address or nil pointer dereference。
所以在使用指针前,务必确保它不为 nil。
指针在函数参数中的应用
Golang 中函数传参默认是值传递,也就是说函数内部对参数的修改不会影响外部变量。但如果传入的是指针,就能实现“类似引用传递”的效果。
例如:
func increment(p *int) {
*p++
}
a := 5
increment(&a)
fmt.Println(a) // 输出 6在这个例子中,我们把 a 的地址传给了 increment 函数,函数内部通过指针修改了 a 的值。
- 使用指针作为参数可以避免复制大对象,提升性能。
- 在设计结构体方法时,接收者也常使用指针类型,以便修改结构体本身的内容。
type Person struct {
Age int
}
func (p *Person) AddOneYear() {
p.Age++
}这样,调用方法时就不会复制整个结构体,而是直接修改原结构体。
基本上就这些。掌握这几个基本操作后,你就能在日常开发中灵活运用指针了。










