通过例子学习 Go 和 Rust ---- 指针

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

指针表示内存上的一段数据的位置、长度、类型信息。在 Go 和 Rust 里面都可以操作指针,咱用一个最简单的例子来看看它们的异同之处。

Go

func zeroval(ival int) {
    ival = 0
}

func zeroptr(iptr *int) {
    *iptr = 0
}

func main() {
    i := 1
    fmt.Println("initial:", i)
    
    zeroval(i)
    fmt.Println("zeroval:", i)
    
    zeroptr(&i)
    fmt.Println("zeroptr:", i)
    
    fmt.Println("pointer:", &i)
}
initial: 1
zeroval: 1
zeroptr: 0
pointer: 0xc000022050

在 go 语言里,参数传入的时候是默认复制一份的,所以不会被修改。除非传入的是指向数据的指针。

Rust

在 Rust 里咱可以实现一样的机制。

fn main() {
    fn zeroval(ival: &i32) {
        let ival = 0;
    }
    
    fn zeroptr(iptr: &mut i32) {
        *iptr = 0;
    }
    
    let mut i = 1;
    println!("initial: {:?}", &i);
    
    zeroval(&i);
    println!("zeroval: {:?}", &i);
    
    zeroptr(&mut i);
    println!("zeroptr: {:?}", &i);
    
    let ptr: *mut i32 = &mut i;
    println!("pointer: {:?}", ptr);
    
}
initial: 1
zeroval: 1
zeroptr: 0
pointer: 0x7ffc2c6e5990

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

本文来自:Segmentfault

感谢作者:Tericoder

查看原文:通过例子学习 Go 和 Rust ---- 指针

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

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