美文网首页
go 语言中 指针的理解

go 语言中 指针的理解

作者: 蛐蛐儿阳 | 来源:发表于2020-05-01 20:58 被阅读0次
// php里面有& 号,就是引用的意思
// go 里面到处是*号,一定要搞懂他。
x := 1
p := &x
// 注意这里p就是指针
// 打印指针 他是类似 0xc0000b4008 的值, 他其实是一个地址,
// 程序里并没有必要直接操作 p,  他是一个地址, 他的值其实没什么意义
fmt.Printf("%v \n", p) // 0xc0000b4008
fmt.Printf("%v \n ", x)

// 指针的意义是, 在不知道变量名称的情况下, 利用指针, 直接控制变量。
// 我这段代码的意思是想说
// *p 就是 x
var c bool = false
c = *p == x
fmt.Printf("%t \n", c)
// 这里, 直接对指针
// 前面必须加*号
// 确切的说,是对 *p 的操作
// 就是直接对 x 的操作
// 记住 &号是取地址操作符, * 是操作指针引用的 变量(可以是很多类型)
*p = 8
fmt.Printf("%d \n", x)

下段代码很好理解, 每次初始赋值, 打印的指针值都不一样

var p = f()

func f() *int{
    v := 1
    return &v
}

func main()  {
    for i := 1; i<10; i++ {
        fmt.Printf("%v \n", f())
    }
}
但是注意,你要是打印p,地址就是一样的,
 因为函数申请了一块空间,这个函数的指针是不会变得

这段代码看下

func incr(p *int)  int {
    *p++
    return *p
}


func main()  {
    fmt.Printf("pp \n")
    v := 1
    incr(&v)
    fmt.Println(v)
    fmt.Printf("pp \n")
    fmt.Println(incr(&v))
}

看完这段我炸了. *号 &号搞懂了, 会比较容易看懂,但在php里面

function incr(&$p) {
  return $p++
}
使用的时候
incr($a)

和go语言代码功能一模一样。
php 果然是世界上最好的语言。 看下go简化后代码

func incr(p *int)  int {
    *p++
    return *p
}
你直接return *p++会报错。
v := 1
incr(&v)
这里&v必须声明初始化,否则报错.
这是最简单写法了。

再理解下

    x := 1
    fmt.Printf("%d \n",x)
    fmt.Printf("%v \n", &x)
    fmt.Printf("%d \n", *&x)

你直接 *x是会报错的, 注意 x , x 一定是个引用,就是一个地址,就是指针。 所以以后看到x, 其实把它看成一个变量就好, *x就是变量别名, x其实是指针, x就是那个内存地址。

虽然写了十年代码了,但我还是菜鸟. 下面是我设想一下指针再go里面的意义。 万事万物都付给一个变量,或方法,或类, 直接操作这个值不就可以了吗? *x有啥意义呢?

事实上, 在底层语言中, 好多资源并没有变量。我尝试画了个图。


image.png

大概是这意思吧, go中好多时候没有x, 你只能通过 *x ,也就是x的别名,去操作4 ,那块内存资源。
这就是指针的意义。

相关文章

  • Go语言指针

    Go 语言中指针是很容易学习的,Go 语言中使用指针可以更简单的执行一些任务。 接下来让我们来一步步学习 Go 语...

  • go 语言中 指针的理解

    下段代码很好理解, 每次初始赋值, 打印的指针值都不一样 这段代码看下 看完这段我炸了. *号 &号搞懂了,...

  • 13-Go语言指针和方法

    指针 普通数据类型指针 Go语言中的普通指针和C语言中的普通指针一样, 通过指针也可以间接操作指向的存储空间 Go...

  • Go语言基础之指针

    区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针。 要搞明白Go语言中的指针需要先知道3个...

  • GO语言学习系列五——GO的控制语句(补充指针)

    补充指针 在GO语言中,提供了控制数据结构的指针的能力,但是,你不能进行指针运算; 在GO语言中,用*关键字来声明...

  • Go语言 指针

    指针 概念 Go语言的指针和C语言一样也是用来保存地址的变量 格式 普通指针 指向数组的指针 注意点 GO语言中只...

  • Go语言入门总结(六)-指针

    指针 1.&和* 在go语言中,也有指针的概念,不同于java。是没有指针的概念的。但是go语言的指针也并没有c中...

  • Golang 指针

    指针 区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针。Go语言当中的指针涉及到三个点:指...

  • 实例解析go语言method指针receiver的用处,及非指针

    method指针receiver的用处 go语言中method使用指针作为receiver接受体的用处与使用费指针...

  • Go语言-指针

    Go语言中的指针不同于C语言,Go语言的指针使用方法要简单很多。当然和C语言从指针定义到指针的使用都有很大的不同。...

网友评论

      本文标题:go 语言中 指针的理解

      本文链接:https://www.haomeiwen.com/subject/gvtcghtx.html