第 10 节:复合类型-5. 指针 -- 指针与指针变量

5. 指针 -- 不容易懂重点

01 指针定义和使用 -- 不容易懂重点

现在已经知道怎样获取变量在内存中的地址,但是如果想将获取的地址进行保存,应该怎样做呢?\
可以通过指针变量来存储,所谓的指针变量:就是用来存储任何一个值的内存地址。\
指针变量的定义如下:\

title

指针变量 p 的定义是通过 这个符号来定义,指针变量 p 的类型为 int, 表示存储的是一个整型变量的地址。\
如果指针变量 p 存储的是一个字符串类型变量的地址,那么指针变量 p 的类型为 * string\
p=&i : 该行代码的意思是,将变量 i 的地址取出来,并且赋值给指针变量 p. 也就是指针变量 p 指向了变量 i 的存储单元。\
可以通过如下图来表示:

title

在以上图中,一定要注意:指针变量 p 存储的是变量 i 的地址。

package main

import "fmt"

func main0301() {

    var a int = 10
    //fmt.Printf("%p\n", &a)

    //  定义指针变量存储变量的地址
    var p *int = &a

    //fmt.Printf("%p\n", p)
    //通过指针间接修改变量的值
    //写操作
    *p = 123

    //fmt.Println(a)
    //读操作
    fmt.Println(*p)

}
func main0302() {

    //声明指针变量 默认值为0x0 (nil)
    //内存地址编号为0  0-255的空间为系统占用  不允许用户访问(读写)
    //空指针
    var p *int = nil

    fmt.Println(p)
    //new(数据类型) 开辟数据类型对应的内存空间  返回值为数据类型指针

    //gc  垃圾回收机制
    p = new(int)

    *p = 123
    fmt.Println(p)

    fmt.Println(*p)
    //fmt.Printf("%p\n", p)
    //fmt.Println(*p)
    //*p = 123
    //
    //fmt.Println(*p)
}
func main() {

    //野指针  指针变量指向了一个未知空间 会报错
    //var p *int = *int(0xc042058088)
    //指针变量必须有一个合理的指向
    //在程序中允许出现空指针 不允许出现野指针

    //fmt.Println(*p)
}

2. 指针变量作为函数参数

package main

import "fmt"

//func swap(a, b int) {
//  a, b = b, a
//}

//指针变量作为函数参数
func swap(a *int, b *int) {
    //fmt.Println(*a)
    //fmt.Println(*b)

    //&变量  取地址操作  引用运算符
    //*指针变量 取值操作  解引用运算符
    //temp := *a
    //
    //fmt.Printf("temp类型:%T\n", temp)
    //*a = *b
    //*b = temp
    *a, *b = *b, *a
}
func main() {

    //a := 10.9 //float64
    ////通过自动推到类型创建指针变量
    ////所有的指针类型都存储的是一个无符号十六进制整型数据
    //p := &a //*float64
    ////*int 类型
    //fmt.Printf("%T\n", p)
    //fmt.Println(p)
    a := 10 //int
    b := 20
    //值传递
    //swap(a, b)
    //地址传递 形参可以改变实参的值
    swap(&a, &b)

    fmt.Println(a, b)
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
嗨,我是波波。曾经创业,有收获也有损失。我积累了丰富教学与编程经验,期待和你互动和进步! 公众号:上海PHP自学中心 付费知识星球:破解面试:程序员的求职导师
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
司机 @ 欣昊玉
文章
273
粉丝
339
喜欢
558
收藏
1106
排名:64
访问:12.2 万
私信
所有博文
社区赞助商