老婆出轨 发表于 2025-4-14 22:07:18

【14】RUST高级特性

不安全操纵

裸指针

必要步伐员保证有用性
从引用创建
let mut num = 5;
let r1 = &num as *const i32;
let r2 = &mut num as *mut i32;
应用

调用C接口
不安全函数or方法

调用也必要在unsafe{}代码块之中,
但是这个不安全调用只必要包装一层unsafe{}即可
fn main() {
        unsafe fn dangerous() {}
       
        unsafe {
                dangerous();
        }
}
extern调用外部函数

extern中声明函数默认是不安全的
调用C语言函数

extern "C" {
        fn abs(input: i32) -> i32;
}

fn main() {
        unsafe {
                println!("Absolute value of -3 according to C: {}", abs(-3));
        }
}
创建供C调用的接口

#告诉编译器不必要修改函数名称。这里extern的是安全的。
#
pub extern "C" fn call_from_c() {
        println!("Just called a Rust function from C!");
}
全局变量(静态变量)

rust中的全局变量使用static标识,有着固定内存地址,可以是mut的,通常使用SCREAMING_SNAKE_CASE命名规则。读写mut的可变静态变量是不安全操纵,必要放在unsafe{}内部。
static mut COUNTER: u32 = 0;

fn add_to_count(inc: u32) {
        unsafe {
        COUNTER += inc;
        }
}

fn main() {
        add_to_count(3);
        unsafe {
                println!("COUNTER: {COUNTER}");
        }
}
不安全的trait

unsafe trait Foo {
// methods go here
}
unsafe impl Foo for i32 {
// method implementations go here
}
fn main() {}
访问联合体中的字段


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 【14】RUST高级特性