文章目录
📌 一、指针的基础概念和定义
🌱 1.1 指针的本质
在 Golang 的世界里,指针就像是一把通往变量内存地址的钥匙。它是一种特殊的变量类型,专门用于存储其他变量在内存中的地址。想象一下,内存就像是一个巨大的仓库,每个变量都存放在特定的位置,而指针则记录了这个位置的坐标。
例如,我们有一个简单的整数变量 var num int = 10,它在内存中占据了一定的空间,而指针可以用来指向这个空间,从而能够间接访问和操作 num 的值。
🌱 1.2 指针类型的声明与初始化
- 声明指针类型:使用
*符号来声明指针类型。例如,var ptr *int表示声明了一个可以指向int类型变量的指针ptr。这里的*int就是指针类型,它告诉编译器ptr是一个专门用于指向int类型变量的指针。 - 初始化指针:要使指针指向一个有效的变量,需要使用
&操作符获取变量的地址并赋值给指针。例如:
var num int = 20
var ptr *int
ptr = &num
在这个例子中,&num 获取了 num 变量的内存地址,并将其赋值给了 ptr 指针,此时 ptr 就指向了 num。
🛠️ 二、指针的使用方法和操作
🔧 2.1 通过指针访问和修改变量值
- 访问变量值:使用
*操作符可以通过指针访问其所指向的变量的值。例如:
fmt.Println(*ptr) // 输出 20,通过指针 ptr 访问 num 的值
这里的 *ptr 就像是沿着指针这把钥匙找到了对应的变量值。
- 修改变量值:同样,我们也可以通过指针来修改其所指向变量的值。例如:
*ptr = 30
fmt.Println(num) // 输出 30,通过指针修改了 num 的值
这就相当于通过指针这把钥匙打开了变量所在的内存空间,并对其中的值进行了修改。
🔧 2.2 指针的零值(nil)与空指针判断
- 零值(nil):在 Golang 中,未初始化的指针变量默认值为
nil。例如:
var p *string
fmt.Println(p == nil) // 输出 true
nil 指针表示指针没有指向任何有效的内存地址。
- 空指针判断:当使用指针时,必须要小心空指针的情况,因为对空指针进行解引用(即使用
*操作符访问其指向的值)会导致程序崩溃。所以在使用指针之前,最好进行空指针判断。例如:
var p *int
if p!= nil {
fmt.Println(*p)
} else {
fmt.Println("指针为空,请先初始化")
}
📦 三、指针和函数
📤 3.1 函数参数传递指针的优势与示例
- 优势:当函数的参数是指针时,函数内部可以直接修改原始变量的值,而不需要返回新的值。这在处理大型数据结构或需要在函数内部修改多个变量时非常有用,可以避免大量的数据拷贝,提高程序的性能。
- 示例:假设我们有一个函数用于交换两个整数的值:
func swapValues(ptr1 *int, ptr2 *int) {
temp := *ptr1
*ptr1 = *


1348

被折叠的 条评论
为什么被折叠?



