Go语言-指针
指针
- 指针是存储另一个变量内存地址的变量
- 取址符号:&
- 获取地址内容 : *
//1、定义一个整数a
a := 10
fmt.Println(a, &a) //10 0xc0000a6058
//2、将a内存地址赋值b
b := &a
fmt.Println(b, &b, *b)//*b:指向a的值 0xc0000a6058 0xc0000ca020 10
//3、将b的值更改
*b = 20
fmt.Println(a, &a) //20 0xc0000a6058
//4.定义一个指针变量
var p *int
p = &a
*p = 20; //为指针变量指向的地址赋值
//5.嵌套指针
var ptr **int //可以将*int看作一个整体
ptr = &p
fmt.Printf("ptr存储的p的地址:%p\t,ptr指向p的值:%d\n", ptr, *ptr) //ptr存储的p的地址:0xc0000ca020 ,ptr指向p的值:824634400856
fmt.Printf("ptr自己的地址:%p\t,ptr取p变量的值为:%d\n", &ptr, **ptr)//ptr自己的地址:0xc0000ca028 ,ptr取p变量的值为:20
(1)指针数组与数组指针
- 数组指针:一个指向数组的指针
- 指针数组:存储数据类型为指针的数组
数组指针
//1、定义一个数组
arr := [4]int{1, 2, 3, 4}
fmt.Printf("arr的内存地址:%p\n", &arr) //arr的内存地址:0xc000012200
//2、定义一个指针,指向数组
var p *[4]int
p = &arr
fmt.Printf("p-->arr的内存地址:%p\n", p) //p-->arr的内存地址:0xc000012200
fmt.Printf("p-->arr的值:%d\n", *p) //p-->arr的值:[1 2 3 4]
fmt.Printf("p自己的地址:%p\n", &p) //p自己的地址:0xc00000a030
//3、将数组的第一、二个元素改变
(*p)[0] = 100
//也可以简写
p[1] = 200
fmt.Printf("p-->arr的值:%d\n", *p) //p-->arr的值:[100 200 3 4]
指针数组
a := 1
b := 2
c := 3
d := 4
arr2 := [4]*int{&a, &b, &c, &d} //定义一个指针数组
fmt.Println(arr2) //[0xc00001c0a8 0xc00001c0d0 0xc00001c0d8 0xc00001c0e0]
fmt.Println(*arr2[0]) //1
*arr2[0] = 100
fmt.Println(*arr2[0]) //100
(2)指针函数
指针函数:返回值为指针的函数
func f1() *[4]int {
arr1 := [4]int{1, 2, 3, 4}
return &arr1
}
(3)指针作为参数
func f2(ptr2 *int) {
fmt.Println("ptr2:", ptr2)
fmt.Println("*ptr2:", *ptr2)
*ptr2 = 100
}
本文作者:silly_fox
本文链接:https://www.cnblogs.com/sillyfox/p/17799028.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南