Golang中的指针怎么用?

举报
liuzhen007 发表于 2021/07/24 21:36:51 2021/07/24
【摘要】 目录前言正文什么是指针?指针怎么用?前言不止C++才有指针,Golang也有指针呦!二者有哪些区别呢?今天就来看一看。​正文什么是指针?指针是用来指向任何一个变量的内存地址的类型,它所指向的变量的内存地址在 32 和 64 位机器上分别占用 4 或 8 个字节,占用字节的大小与所指向的值的大小无关。下面我们通过一个例子来了解一下指针是如何表示地址的。实例代码:package mainimpo...

目录

前言
正文
什么是指针?
指针怎么用?


前言

不止C++才有指针,Golang也有指针呦!二者有哪些区别呢?今天就来看一看。

​正文

什么是指针?

指针是用来指向任何一个变量的内存地址的类型,它所指向的变量的内存地址在 32 和 64 位机器上分别占用 4 或 8 个字节,占用字节的大小与所指向的值的大小无关。

下面我们通过一个例子来了解一下指针是如何表示地址的。

实例代码:

package main

import (
    "fmt"
)

func main() {
    var a int = 1 // 一个整型变量a
    var b string = "abcdefg" // 一个字符串变量b
    fmt.Printf("%p %p", &a, &b) // 分别输出a和b的地址
}
运行结果:

0xc00007e020 0xc00005e1e0

值得注意的是,Golang中在声明变量时,是可以使用汉字的。比如,下面的编码形式也是可以编译通过并且正确运行的。

package main

import (
    "fmt"
)

func main() {
    var 一个整型变量 int = 1
    var 一个字符串变量 string = "abcdefg"
    fmt.Printf("%p %p", &一个整型变量, &一个字符串变量)
}
运行结果:

0xc000016060 0xc000010210

指针怎么用?

指针可以用来获取变量的地址,同时也可以用来获取变量对应的值。

下面我们通过一个例子,来了解Golang中的指针是如何获取变量地址以及它的值的。

实例代码:

package main

import (
    "fmt"
)

func main() {

    // 准备一个字符串类型
    var a = "Hello, world"

    // 获取字符串的地址, ptr类型为*string
    ptr := &a

    // 打印ptr的类型
    fmt.Printf("ptr type: %T\n", ptr)

    // 打印ptr的地址
    fmt.Printf("address: %p\n", ptr)

    // 对指针进行取值
    value := *ptr

    // 打印value的类型
    fmt.Printf("value type: %T\n", value)

    // 打印value的值
    fmt.Printf("value: %s\n", value)

}

运行结果:

ptr type: *string
address: 0xc000010210
value type: string
value: Hello, world

通过代码的执行结果,我们可以知道ptr是一个string字符串类型的指针,它的地址是0xc000010210,它指向的值是 Hello, world。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。