先来看一段Rust代码
#[test]
fn test1() {
let x = 42;
let mut y = &x;
let z = &mut y;
let a = 66;
*z = &a;
println!("{y}");
}
#[test]
fn test2() {
let x = 42;
let mut y = &x;
let a = 66;
y = &a;
println!("{y}");
}
上面的两段代码实际上是一样的,
test1
通过z
持有y
的可变引用,因此可以修改y
的指向。
使用C改写
#include <stdio.h>
int main(void) {
int x = 42;
int *y = &x;
int **z = &y; // 在这里要使用二级指针
int a = 66;
*z = &a;
printf("%d\n", *y);
return 0;
}
#include <stdio.h>
int main(void) {
int x = 42;
int *y = &x;
int a = 66;
y = &a;
printf("%d\n", *y);
return 0;
}