gpt4 book ai didi

arrays - 如何将数组传递给 Rust 中的函数并更改其内容?

转载 作者:行者123 更新时间:2023-11-29 07:40:45 25 4
gpt4 key购买 nike

我想将数组传递给函数并更改其中的内容:

fn change_value(mut arr: &[i32]) {
arr[1] = 10;
}

fn main() {
let mut arr: [i32; 4] = [1, 2, 3, 4];
change_value(&arr);
println!("this is {}", arr[1]);
}

我收到这个错误:

warning: variable does not need to be mutable
--> src/main.rs:2:17
|
2 | fn change_value(mut arr: &[i32]) {
| ----^^^
| |
| help: remove this `mut`
|
= note: `#[warn(unused_mut)]` on by default

error[E0594]: cannot assign to `arr[_]` which is behind a `&` reference
--> src/main.rs:3:5
|
2 | fn change_value(mut arr: &[i32]) {
| ------ help: consider changing this to be a mutable reference: `&mut [i32]`
3 | arr[1] = 10;
| ^^^^^^^^^^^ `arr` is a `&` reference, so the data it refers to cannot be written

warning: variable does not need to be mutable
--> src/main.rs:7:9
|
7 | let mut arr: [i32; 4] = [1, 2, 3, 4];
| ----^^^
| |
| help: remove this `mut`

我一直在四处寻找,但找不到任何东西。

最佳答案

Rust 引用(由 & 符号表示)有两种:不可变的(&T)和可变的(&mut T)。为了更改引用背后的值,此引用必须是可变的,因此您需要:

  1. 接受 &mut [i32] 作为函数参数,而不是 &[i32]
  2. &mut arr传递给函数,而不是&arr:
fn change_value(arr: &mut [i32]) {
arr[1] = 10;
}

fn main() {
let mut arr: [i32; 4] = [1, 2, 3, 4];
change_value(&mut arr);
println!("this is {}", arr[1]);
}

你不需要在 change_value 的参数中使用 mut arr 因为 mut 表示该变量的可变性,而不是它的数据的可变性指着。使用 mut arr: &[i32] 您可以重新分配 arr 本身(使其指向不同的切片),但您不能更改它引用的数据。

如果您想接受数组而不是切片,您也可以这样做:

fn change_value(arr: &mut [i32; 4]) {
arr[1] = 10;
}

另见:

关于arrays - 如何将数组传递给 Rust 中的函数并更改其内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24831828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com