分享
通过例子学习 Go 和 Rust ---- 指针
Tericoder · · 1170 次点击 · · 开始浏览这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
指针表示内存上的一段数据的位置、长度、类型信息。在 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
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信1170 次点击
上一篇:Go 项目标准布局(结构)
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
指针表示内存上的一段数据的位置、长度、类型信息。在 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