You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Rust中能否将单个值的可变引用传入接收切片的函数?

Rust中安全实现类似C的单值切片修改操作

先看你给出的C语言实现:

// Returns the number of bytes written
int write_to_buffer(int buffer[]) {
    buffer[0] = 1234;
    return 1;
}

int main() {
    int value = 0;
    int num_bytes = write_to_buffer(&value);
    
    // `value` now has the value of 1234
}

在C里,数组参数会退化为指针,单个变量的地址可以被当作长度为1的数组指针传入,从而修改变量值。

在Rust中完全可以安全实现类似逻辑,核心是用标准库的std::slice::from_mut函数,它能把单个可变引用转换成长度为1的可变切片&mut [T],示例代码如下:

/// 返回写入的元素个数
fn write_to_buffer(buffer: &mut [i32]) -> usize {
    if !buffer.is_empty() {
        buffer[0] = 1234;
        1
    } else {
        0
    }
}

fn main() {
    let mut value = 0;
    // 将单个可变引用转为长度为1的可变切片
    let num_elements = write_to_buffer(std::slice::from_mut(&mut value));
    
    println!("value now has the value of {}", value); // 输出 1234
}

补充说明:

  • std::slice::from_mut是安全的标准库函数,保证生成的切片指向有效的单个元素,不存在越界风险
  • 函数里增加了切片非空检查,避免空切片访问buffer[0]触发panic,提升代码健壮性
  • 如果需要对应C中的字节数,可以用std::mem::size_of::<i32>() * num_elements计算总写入字节数

内容的提问来源于stack exchange,提问作者ClydeTheGhost

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 08:42:04