Golang 教程
Golang 控制语句
Golang 函数 & 方法
Golang 切片 & 数组
Golang 结构体
Golang 字符串
Golang 接口
Golang 指针
Golang 并发
Golang 异常(Error)
Golang 其他杂项

Go 指针指向指针(双指针)

时间:2023年06月10日 阅读:206
以下内容仅是站长或网友个人学习笔记、总结和研究收藏。不保证正确性,因使用而带来的风险与本站无关!
淘客轩-衣食住行外卖生活好助手

Go编程语言中的指针是一个变量,用于存储另一个变量的内存地址。指针是一个特殊的变量,因此它甚至可以指向任何类型的变量。基本上,这看起来像是一个指针链。当我们定义一个指向指针的指针时,第一个指针将用于存储第二个指针的地址。这个概念有时被称为双指针

如何在Golang中声明指向指针的指针?
将指针声明为Pointer类似于在Go中声明指针。区别在于我们必须在指针名称的名称之前放置一个额外的' * '。通常,当我们使用var关键字和类型声明指针变量时,就可以完成此操作。

示例1:在下面的程序中,指针pt2存储pt1指针的地址。解引用pt2* pt2将给出变量v的地址,或者您也可以说指针pt1的值。如果您尝试** pt2,那么将给出变量v的值,即100。

package main

import "fmt"

func main() {

    //整数类型变量
    var V int = 100

    //获取一个指针
    //的整数类型
    var pt1 *int = &V

    //获取指向的指针
    //指向pt1的指针存储地址
    //将pt1转化为pt2
    var pt2 **int = &pt1

    fmt.Println("变量V的值为 = ", V)
    fmt.Println("变量V的地址为 = ", &V)

    fmt.Println("pt1的值为 = ", pt1)
    fmt.Println("pt1地址为 = ", &pt1)

    fmt.Println("pt2的值为 = ", pt2)

    //解引用
    //指向指针的指针
    fmt.Println("pt2地址的值为(*pt2) = ", *pt2)

    //双指针将给出变量V的值
    fmt.Println("*(pt2地址处的值为) 或 **pt2 = ", **pt2)
}

输出:

变量V的值为 =  100
变量V的地址为 =  0xc000062090
pt1的值为 =  0xc000062090
pt1地址为 =  0xc00008c018
pt2的值为 =  0xc00008c018
pt2地址的值为(*pt2) =  0xc000062090
*(pt2地址处的值为) 或 **pt2 =  100

示例2:让我们在上面的程序中进行一些更改。通过使用解引用更改指针的值来为指针分配一些新值,如下所示:

// Go程序来说明指针指向指针的概念
package main

import "fmt"

func main() {

    // 定义int类型变量
    var v int = 100

    // 一个整数类型的指针
    var pt1 *int = &v

    //获取指向的指针
    //指向pt1的指针存储地址
    //将pt1转化为pt2
    var pt2 **int = &pt1

    fmt.Println("变量v的值为 = ", v)

    //通过赋值来更改v的值
    //指向指针pt1的新值
    *pt1 = 200

    fmt.Println("更改pt1后存储在v中的值 = ", v)

    //通过赋值来更改v的值
    //指向指针pt2的新值
    **pt2 = 300

    fmt.Println("更改pt2后存储在v中的值 = ", v)
}

输出:

变量v的值为 =  100
更改pt1后存储在v中的值 =  200
更改pt2后存储在v中的值 =  300

相关知识:Go 指针

打赏

本文地址:https://www.momojc.cn/golang/go-pointer-to-pointer-double-pointer.html

关于本站 | 隐私政策 | 免责声明 | 广告合作 | 我要投稿 | 后台管理

CopyRight © 2023-2024 MOMO教程 WWW.MOMOJC.CN , All Rights Reserved.

站长E-mail:378074730@qq.com 网站已运行:  运行时长:0.070 秒

京ICP备20029690号-1京ICP备20029690号-2 京公网安备11011402013892号京公网安备11011402013892号 中国互联网违法和不良信息举报中心 网络违法犯罪举报网站

本网站托管于 腾讯云 .由网站卫士提供网站加速和攻击防御服务 提供CDN加速/防御服务.由zblogcn强力驱动 又拍云提供CDN加速/云存储服务 51la网站统计