Оператор разыменования *
Оператор * (разыменование) используется для получения
значения, на которое указывает ссылка или умный указатель.
Он работает с типами, реализующими трейт Deref или
DerefMut. Оператор не принимает параметров, а
применяется к выражению-указателю. Результатом является
значение, расположенное по адресу, который хранит указатель.
Синтаксис
*выражение
Пример
Давайте получим значение переменной через ссылку
с помощью оператора *:
fn main()
{
let x = 5;
let r = &x;
let res = *r;
println!("{}", res);
}
Результат выполнения кода:
5
Пример
Давайте изменим значение переменной через изменяемую ссылку
с помощью оператора *:
fn main()
{
let mut x = 5;
let r = &mut x;
*r = 10;
println!("{}", x);
}
Результат выполнения кода:
10
Пример
Давайте разыменуем умный указатель Box,
чтобы получить хранимое в нём значение:
fn main()
{
let b = Box::new(42);
let res = *b;
println!("{}", res);
}
Результат выполнения кода:
42
Пример
Давайте разыменуем строку String через ссылку,
чтобы получить срез str:
fn main()
{
let s = String::from("abcde");
let r = &s;
let res: &str = &*r;
println!("{}", res);
}
Результат выполнения кода:
"abcde"
Смотрите также
-
трейт
Deref,
который позволяет разыменовывать умные указатели -
механизм
заимствования,
который создаёт ссылки для разыменования -
концепция
владения,
которая определяет, кто владеет значением -
трейт
Copy,
который позволяет копировать значение при разыменовании