指针表示内存上的一段数据的位置、长度、类型信息。在 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
有疑问加站长微信联系(非本文作者)