4.4. 第 3 节:指针 -- 指针与指针变量

未匹配的标注
本文档最新版为 2023,旧版本可能放弃维护,推荐阅读最新版!

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

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

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

p>  <p><a href=p> <pre><code class=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)
}

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~