【14】RUST高级特性

文章目录

不安全操作

裸指针

需要程序员保证有效性

从引用创建

rust 复制代码
let mut num = 5;
let r1 = &num as *const i32;
let r2 = &mut num as *mut i32;

应用

调用C接口

不安全函数or方法

调用也需要在unsafe{}代码块之中,

但是这个不安全调用只需要包装一层unsafe{}即可

rust 复制代码
fn main() {
	unsafe fn dangerous() {}
	
	unsafe {
		dangerous();
	}
}

extern调用外部函数

extern中声明函数默认是不安全的

调用C语言函数

rsut 复制代码
extern "C" {
	fn abs(input: i32) -> i32;
}

fn main() {
	unsafe {
		println!("Absolute value of -3 according to C: {}", abs(-3));
	}
}

创建供C调用的接口

#[no_mangle]告诉编译器不需要修改函数名称。这里extern的是安全的。

rust 复制代码
#[no_mangle]
pub extern "C" fn call_from_c() {
	println!("Just called a Rust function from C!");
}

全局变量(静态变量)

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

rsut 复制代码
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

rust 复制代码
unsafe trait Foo {
// methods go here
}
unsafe impl Foo for i32 {
// method implementations go here
}
fn main() {}

访问联合体中的字段

相关推荐
shandianchengzi1 分钟前
【记录】Rust|Rust开发相关的7个VSCode插件的介绍和推荐指数(2025年)
开发语言·vscode·rust
爱吃烤鸡翅的酸菜鱼1 分钟前
Spring Boot 注解全栈指南:涵盖 Bean 注册、配置加载、请求映射、事务控制、数据校验等一网打尽
java·开发语言·spring boot·后端·spring
有味道的男人2 分钟前
淘宝图片搜索(拍立淘)+ 店铺全商品爬虫 深度实战指南(Python)
开发语言·爬虫·python
尘诞辰5 分钟前
【C语言】数据在内存中的储存
c语言·开发语言·数据结构·c++
JPX-NO5 分钟前
Rust + Rocket + Diesel构建的RESTful API示例(CRUD)
开发语言·rust·restful
无敌最俊朗@7 分钟前
STL-关联容器(面试复习4)
开发语言·c++
bybitq10 分钟前
string,byte,rune,character?详解Golang编码-UTF-8
开发语言·后端·golang
wjs202413 分钟前
HTML 框架:构建网页结构的基础
开发语言
无限进步_14 分钟前
【C语言】栈(Stack)数据结构的实现与应用
c语言·开发语言·数据结构·c++·后端·visual studio
embrace9914 分钟前
【C语言学习】预处理详解
java·c语言·开发语言·数据结构·c++·学习·算法