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

如何将[[char;3];3]转为&mut [&mut [char]]以调用Rust函数?

解决方案

要将固定大小的二维数组 [[char; 3]; 3] 转换为 &mut [&mut [char]] 类型传给 put_plus 函数,你可以按以下步骤调整代码:

1. 修复循环的所有权问题

原代码中 for row in map 会转移数组的所有权,导致后续无法再次访问 map。需改为引用遍历以保留所有权:

// 第一次遍历
for row in &map {
    for &col in row {
        print!("{} ", col);
    }
    println!("");
}

// 修改后的第二次遍历
for row in &map {
    for &col in row {
        print!("{} ", col);
    }
    println!("");
}

2. 类型转换与函数调用

固定大小数组可隐式转换为切片,你可以手动构造一个包含每行可变切片的数组,再将其转换为 &mut [&mut [char]] 传入函数:

println!("Changing...");
// 构造每行的可变切片数组
let mut rows = [&mut map[0], &mut map[1], &mut map[2]];
// 将数组的可变引用传给函数
put_plus(&mut rows);

完整可运行代码

fn main() {
    let mut map = [['-'; 3]; 3];

    // 第一次遍历(使用引用避免所有权转移)
    for row in &map {
        for &col in row {
            print!("{} ", col);
        }
        println!("");
    }

    println!("Changing...");
    let mut rows = [&mut map[0], &mut map[1], &mut map[2]];
    put_plus(&mut rows);

    // 第二次遍历
    for row in &map {
        for &col in row {
            print!("{} ", col);
        }
        println!("");
    }
}

fn put_plus(map: &mut [&mut [char]]) {
    map[map.len() - 1][map[map.len() - 1].len() - 2] = '+';
}

运行结果

- - - 
- - - 
- - - 
Changing...
- - - 
- - - 
- + - 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:01:01