Golang中的指针怎么用?

目录

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


前言

不止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。

(完)