⑥ 指针

本文即将看到:
⚬ ------ 指针的声明
⚬ ------ 指针的操作
⚬ ------ 指针的指针

一、指针的声明

  1. 概念
    指针是存储另一个变量的内存地址的变量。
  1. 声明
var name *type

空指针

● 当一个指针被定义后没有分配到任何变量时,它的值为 nil。
● nil 指针也称为空指针。

二、指针的操作

  1. 获取指针的值
& 符号: 取地址
* 符号: 取数据
  1. 操作指针改变变量的值
    a := 10
    var p1 *int
    p1 = &a          //p1指向a的地址
    *p1 = 100        //改变a的值
    fmt.Println(p1,*p1)     // 0xc00000a0c8 10
    fmt.Println(&a,a)      //0xc00000a0c8 100
  1. 数组指针
    //指针数组
    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]
  1. 使用指针传递函数的参数
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
}
posted @   Gonfei  阅读(129)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· .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 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示