Golang基础-九、指针-《Golang,Go,Go,Go学习笔记》

admin 2026-03-24 10:12:41 编程 来源:ZONE.CI 全球网 0 阅读模式
  • 1.指针
  • 2.指针指向指针
  • 3.数组指针与指针数组
  • 4.指针函数
  • 5.指针为函数的参数

    1.指针

    1. - 一个指针变量指向了一个值的内存地址
    2. - 定义指针变量
    3. - 为指针变量赋值:&
    4. - 修改指针变量中多指向地址的值:*
    1. func main() {
    2. var a int =10 //声明变量
    3. fmt.Printf("a内存地址:%p\n",&a)
    4. var p *int //声明指针
    5. p=&a //p存储a的内存地址
    6. fmt.Println("p存储的地址:",p)
    7. fmt.Println("p自己的内存地址:",&p)
    8. //修改a或者*p的值,所指向同一个地址的变量的值都会变化
    9. a =20
    10. fmt.Println("a的值",a)
    11. fmt.Println("p的值",*p)
    12. *p=30
    13. fmt.Println("a的值",a)
    14. fmt.Println("p的值",*p)
    15. }

    2.指针指向指针

    1. - 格式:var p **int
    2. - 一个指针变量存放的是另一个指针变量的地址
    3. - 第一个指针变量存放第二个指针的地址,第二个指针存放变量的地址
    1. func main() {
    2. var a int = 10 //声明普通变量
    3. var ptr *int //声明指针变量
    4. var pptr **int //声明指向指针的指针变量
    5. ptr = &a //将a的地址赋值给ptr
    6. pptr = &ptr //将ptr的地址赋值给pptr
    7. fmt.Printf("a的值是%d,a的地址是%p\n", a, &a)
    8. fmt.Printf("*ptr的值是%d,*ptr存储的地址是%p,*ptr的地址是%p\n", *ptr, ptr, &ptr)
    9. fmt.Printf("**pptr的值是%d,**ptr存储的地址是%p,**ptr的地址是%p\n", **pptr, pptr, &pptr)
    10. **pptr = 20
    11. fmt.Println(a, ",", *ptr) //20,20
    12. }

    3.数组指针与指针数组

    1. - 数组指针:是一个指针,指向了数组
    1. func main() {
    2. //创建数组
    3. var a =[4]int{1,2,3,4}
    4. fmt.Printf("数组地址:%p\n",&a)
    5. //创建一个指针,指向数组
    6. var p *[4]int
    7. p=&a
    8. fmt.Printf("p指向的地址:%p\n",p)
    9. fmt.Println("p自己的地址:",&p)
    10. fmt.Println("p指向的值:",*p)
    11. //用数组指针修改数组
    12. //1.原生写法
    13. (*p)[0]=100
    14. fmt.Println(a[0])
    15. //2.简便写法
    16. p[0]=200
    17. fmt.Println(a[0])
    18. }
    1. - 指针数组:是一个数组,保存的指针
    1. func main() {
    2. a:=1
    3. b:=2
    4. c:=3
    5. //创建一个指针数组
    6. var p=[3]*int{&a,&b,&c}
    7. fmt.Println(p)
    8. //通过指针修改a的值
    9. *p[0]=100
    10. fmt.Println(a)
    11. a=200
    12. fmt.Println(*p[0])
    13. }

    4.指针函数

    1. - 函数的返回值是指针
    1. func main() {
    2. //调用该函数返回的是一个指针
    3. ptr := p1()
    4. fmt.Println("ptr指向地址的值", *ptr)
    5. fmt.Printf("ptr自己内存地址:%p\n", &ptr)
    6. fmt.Printf("ptr指向的内存地址%p", ptr)
    7. }
    8. //类型为指针的函数
    9. func p1() *[4]int {
    10. arr := [4]int{1, 2, 3, 4}
    11. fmt.Printf("arr地址:%p\n", &arr)
    12. return &arr //返回指针
    13. }

    5.指针为函数的参数

    1. - 函数的参数为指针
    1. func main() {
    2. a :=10
    3. fmt.Println("a的地址是",&a)
    4. p1(&a)
    5. }
    6. //参数为指针的函数
    7. func p1(ptr *int) {
    8. fmt.Println("ptr存放的地址是",ptr)
    9. fmt.Println("ptr的值是",*ptr)
    10. }
    评论:0   参与:  0