Rust 中的数组和数组切片引用

创建数组

rust 复制代码
let arr = [1, 2, 3, 4]

创建动态数组

rust 复制代码
let mut vec = Vec::new();
vec.push(t);

数组切片引用类型

切片引用 和切片 两个名词经常被混用,因为 Rust 实际编程中几乎不用真正的切片类型。切片引用的类型是 &T 。 切片引用本质上是个**胖指针(保存着指向数据的地址和元素的个数)。**而静态数组类型是在类型中保存长度信息的,这个信息是编译时可获取的。

rust 复制代码
// 数组:[T; N] - 编译时已知长度
let array: [i32; 3] = [1, 2, 3]; // 类型中包含了长度 3

// 切片:&[T] - 运行时才知道长度
let slice: &[i32] = &array[..]; // 类型中不包含长度
rust 复制代码
use std::mem::size_of;

fn main() {
    // 引用的大小
    println!("&i32: {} bytes", size_of::<&i32>());        // 8 bytes
    println!("&[i32]: {} bytes", size_of::<&[i32]>());    // 16 bytes (胖指针)
    println!("&str: {} bytes", size_of::<&str>());        // 16 bytes (也是胖指针)
    // &str 是字符串切片引用,也是胖指针。str 类型也不会被单独使用。
    // Vec 的大小
    println!("Vec<i32>: {} bytes", size_of::<Vec<i32>>()); // 24 bytes (指针+长度+容量)
}

数组切片引用类型方便由静态数组,动态数组类型转化而来,适合作为统一接口。

相关推荐
CHHH_HHH17 分钟前
【Linux网络篇】初识网络与Socket编程基础
linux·服务器·c语言·开发语言·网络·后端·1024程序员节
jimy124 分钟前
C++ 中 xvalue 的 identity 存在哪里?和 lvalue 的 identity 有什么区别?
开发语言·c++·1024程序员节
yujunl30 分钟前
U9 无授权的模式WebAPI开发的总结
开发语言·1024程序员节
zzu123zsw34 分钟前
为什么 Python 做 Agent 总在并发中崩溃?拆解 Blockcell 在 Rust 下的 Host-Cell 隔离与自愈状态机
开发语言·python·rust·大模型·ai agent
xiaoye-duck1 小时前
《C++ 项目:手写大模型接入 SDK》Provider分析与实现
开发语言·c++·语言模型
denlaku1 小时前
JDK 22 新特性详解
java·开发语言
“AI国潮设计-小江”2 小时前
AIGC实战:Python+SDXL批量生成英歌舞IP立牌,解锁猪猪蛋糕“反差萌”流量密码(附完整API源码)
开发语言·人工智能·python·prompt·aigc
hsg772 小时前
简述:基于Ubuntu24编译发布rust开发的html+web后端服务的方法
rust·1024程序员节
H.莓飛2 小时前
【数据结构】排序_OJ题(二):划分与选择
linux·服务器·c语言·开发语言·数据结构·visual studio
CRMEB系统商城2 小时前
服装连锁的导购分销与企微私域
java·大数据·开发语言·人工智能·小程序·php·1024程序员节