go 指针

小兵 · · 1005 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

指针

Go 拥有指针。指针保存了值的内存地址。

类型*T是指向T类型值的指针。其零值为nil

var p *int

&操作符会生成一个指向其操作数的指针。

i := 42
p = &i

*操作符表示指针指向的底层值。

fmt.Println(*p) // 通过指针 p 读取 i
*p = 21 // 通过指针 p 设置 i

这也就是通常所说的“间接引用”或“重定向”。

与 C 不同,Go 没有指针运算

案例:

package main

import "fmt"

func main() {
    i, j := 42, 2701

    p := &i         // 指向 i
    fmt.Println(*p) // 通过指针读取 i 的值
    *p = 21         // 通过指针设置 i 的值
    fmt.Println(i)  // 查看 i 的值

    p = &j         // 指向 j
    *p = *p / 37   // 通过指针对 j 进行除法运算
    fmt.Println(j) // 查看 j 的值
}
package main

import "fmt"

func swap(a *int, b *int) {
    tmp := *a  // “间接引用”或“重定向” 注意go没有指针运算
    *a = *b
    *b = tmp
    return
}

func main() {
    first := 100
    second := 200
    swap(&first, &second)
    fmt.Println(first) // 200
    fmt.Println(second) // 100
}
package main

import "fmt"

func swap(a *int, b *int) (int, int) {
    tmp := a
    a = b
    b = tmp
    return *a, *b
}

func main() {
    first := 100
    second := 200
    a, b := swap(&first, &second) // 交换a,b值,地址copy
    fmt.Println(a, b)
    fmt.Println(first)  // 100
    fmt.Println(second) // 200
}

有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:小兵

查看原文:go 指针

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1005 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传