⑥ 指针
本文即将看到:
⚬ ------ 指针的声明
⚬ ------ 指针的操作
⚬ ------ 指针的指针
一、指针的声明
- 概念
指针是存储另一个变量的内存地址的变量。
- 声明
var name *type
空指针
● 当一个指针被定义后没有分配到任何变量时,它的值为 nil。
● nil 指针也称为空指针。
二、指针的操作
- 获取指针的值
& 符号: 取地址
* 符号: 取数据
- 操作指针改变变量的值
a := 10
var p1 *int
p1 = &a //p1指向a的地址
*p1 = 100 //改变a的值
fmt.Println(p1,*p1) // 0xc00000a0c8 10
fmt.Println(&a,a) //0xc00000a0c8 100
- 数组指针
//指针数组
arr := [4]int{1, 2, 3, 4}
var p *[len(arr)]int
p = &arr
fmt.Println(p) // &[1 2 3 4]
fmt.Println(*p) // [1 2 3 4]
fmt.Println(&p) // 0xc000006040
//修改数组内的数据
p[0] = 100 // 相当于(*p)[0] = 100
fmt.Println(*p) // [100 2 3 4]
- 使用指针传递函数的参数
func change(a *int){
*a = 50
}
func main(){
c := 20
fmt.Println(c)
change(&c) // 函数的参数是指针类型 &c传入c的地址
fmt.Println(c)
}
三、指针的指针 一个指针变量存放的又是另一个指针变量的地址,则称这个指针变量为指向指针的指针变量。
func main() {
a := 10
var (
p1 *int //指针
p2 **int //指针的指针
)
p1 = &a
p2 = &p1
fmt.Println(a, &a) //10 0xc00006c090
fmt.Println(p1, &p1, *p1) //0xc00006c090 0xc000096018 10
fmt.Println(p2, *p2) //0xc000096018 0xc00006c090
fmt.Println( **p2, &p2) //10 0xc000096020
**p2 = 100 //操作指针改变a的值
fmt.Println(**p2) //100
//*p2 ->指向的是p1的数据 也就是p1指针指向的a的地址
fmt.Println(*p2) //0xc00006c090
fmt.Println(a) //100
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?