第八章 指针

时间:2022-07-28
本文章向大家介绍第八章 指针,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

前言

本章中,我们介绍一下Go语言中的指针。 Go语言中也有指针,但是大家不要怕,Go语言的指针很简单,不会像C++指针那么复杂。

Go指针

Go没有指针运算,指针是编程语言中的对象,它的值通常指向(point to)计算机内存中另一个值的地址。

当我们定义x为int值,我们可以定义x=1。为了知道x的内存地址,我们可以使用&x,也就是定义了一个指针。 用如下代码测试一下:

package main

import "fmt"

func main() {

    var a int

    a = 10

    fmt.Println(a)  // 打印a的值
    fmt.Println(&a) // 打印a的地址
}

测试结果

10
0xc00000a0c8

我们可以看到x的值为10,其内存地址为0xc00000a0c8。内存地址可以用&取地址符来检索。

定义

我们可以用*来定义指针类型,例如 var a *int,然后使用*a = 值的方式来设定指针的值;使用x=内存地址来设置内存地址。使用如下代码测试一下:

package main

import "fmt"

func main() {

    var a int

    a = 10

    fmt.Println(a)  // 打印a的值
    fmt.Println(&a) // 打印a的地址

    // 定义指针
    var num *int
    val := new(int)

    num = new(int)
    *num = a    // 设置值

    val = &a    // 设置地址

    fmt.Println("*****指针 num*****")
    fmt.Println(*num)   // 打印指针值
    fmt.Println(num)    // 打印指针地址

    fmt.Println("*****指针 val*****")
    fmt.Println(*val)   // 打印指针值
    fmt.Println(val)    // 打印指针地址
}

测试结果

10
0xc00000a0c8
*****指针 num*****
10
0xc00000a118
*****指针 val*****
10
0xc00000a0c8

值传递?引用传递

Go语言只有值传递一种方式