指针
什么是指针
package main
import "fmt"
func main() {
var a int = 10
b := &a
fmt.Printf("a 类型:%T, 地址:%p\n", a, &a)
fmt.Printf("b 类型:%T, 地址:%p\n", b, &b)
fmt.Println(b)
fmt.Println("获取指针变量b的结果:", *b)
*b = 20
fmt.Println("修改后的a:", a)
fmt.Println("修改后的b:", *b)
}
指针使用
- 定义指针变量
- 为 指针变量赋值
- 访问指针变量中地址的值
package main
import "fmt"
func main() {
var a int = 10
var ptr *int
ptr = &a
fmt.Printf("ptr 指针变量存储地址:%p\n", ptr)
fmt.Printf("ptr 指针变量自己地址:%p\n", &ptr)
fmt.Printf("ptr 指针变量存储地址取值:%d\n", *ptr)
var ptr2 **int
ptr2 = &ptr
fmt.Printf("ptr2 指针的指针变量存储地址:%p\n", ptr2)
fmt.Printf("ptr2 指针的指针变量自己地址:%p\n", &ptr2)
fmt.Printf("ptr2 指针的指针变量存储地址取值:%d\n", **ptr2)
a = 20
fmt.Printf("a的值:%d\n", a)
fmt.Printf("ptr的值:%d\n", *ptr)
fmt.Printf("ptr2的值:%d\n", **ptr2)
**ptr2 = 40
fmt.Printf("a的值:%d\n", a)
fmt.Printf("ptr的值:%d\n", *ptr)
fmt.Printf("ptr2的值:%d\n", **ptr2)
}
指针和数组
package main
import "fmt"
func main() {
arr := [3]int{1, 2, 3}
fmt.Println("数组arr:", arr)
fmt.Printf("数组arr内存地址:%p\n", &arr)
var ptr *[3]int
ptr = &arr
fmt.Printf("指针ptr存储的数组内存地址:%p\n", ptr)
fmt.Printf("指针ptr存储的自己内存地址:%p\n", &ptr)
fmt.Printf("指针ptr存储的数组取值:%v\n", *ptr)
(*ptr)[0] = 100
fmt.Println(arr)
ptr[0] = 200
fmt.Println(arr)
a := 111
b := 222
c := 333
d := 444
arr1 := [4]*int{&a, &b, &c, &d}
fmt.Println(arr1)
fmt.Println("修改 前 指针数组:arr1 中 a变量的数据", a)
fmt.Println("修改 前 指针数组:arr1 中 a变量的数据", *arr1[0])
*arr1[0] = 1000
fmt.Println("修改 后指针数组:arr1 中 a变量的数据", a)
fmt.Println("修改 后指针数组:arr1 中 a变量的数据", *arr1[0])
}
指针函数
package main
import "fmt"
func ptrFunc() *[4]int {
ptrArr := [4]int{1, 2, 3, 4}
return &ptrArr
}
func main() {
ptrFuncRes := ptrFunc()
fmt.Println("打印函数结果:", ptrFuncRes)
fmt.Printf("指针函数结果类型:%T\n", ptrFuncRes)
fmt.Printf("指针函数结果变量ptrFuncRes自己的地址:%p\n", &ptrFuncRes)
fmt.Printf("指针函数结果取值:%v\n", *ptrFuncRes)
fmt.Println("修改前:", (*ptrFuncRes)[0])
fmt.Println(*ptrFuncRes)
(*ptrFuncRes)[0] = 222
fmt.Println("修改前:", (*ptrFuncRes)[0])
fmt.Println(*ptrFuncRes)
fmt.Println("-----")
fmt.Println("修改前:", ptrFuncRes[0])
fmt.Println(*ptrFuncRes)
ptrFuncRes[0] = 333
fmt.Println("修改前:", ptrFuncRes[0])
fmt.Println(*ptrFuncRes)
}
指针作为函数的参数
package main
import "fmt"
func updatePtrParamsFunc(ptr *int) int {
fmt.Println("指针参数 ptr 修改前:", ptr)
fmt.Printf("指针参数 ptr 修改前 类型:%T\n", ptr)
fmt.Printf("指针参数 ptr 修改前 变量地址:%p\n", &ptr)
*ptr = 100
fmt.Println("指针参数 ptr 修改后:", ptr)
fmt.Printf("指针参数 ptr 修改后 类型:%T\n", ptr)
fmt.Printf("指针参数 ptr 修改后 变量地址:%p\n", &ptr)
return *ptr
}
func updatePtrParamsFunc2(ptrArr *[3]int) {
fmt.Println("指针参数 ptrArr 修改前:", ptrArr)
fmt.Printf("指针参数 ptrArr 修改前 类型:%T\n", ptrArr)
fmt.Printf("指针参数 ptrArr 修改前 变量地址:%p\n", &ptrArr)
ptrArr[0] = 100
fmt.Println("指针参数 ptr 修改后:", ptrArr)
fmt.Printf("指针参数 ptr 修改后 类型:%T\n", ptrArr)
fmt.Printf("指针参数 ptr 修改后 变量地址:%p\n", &ptrArr)
}
func main() {
var num = 10
updatePtrParamsFunc(&num)
fmt.Println(num)
var array = [3]int{1, 2, 3}
updatePtrParamsFunc2(&array)
fmt.Println(array)
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2019-07-02 Python进阶(十二)----re模块