rust学习-借用 (1)

  因生活需要,近期开始记录rust的学习笔记,就从这篇开始吧。

fn main() {
    let s1 = String::from("hello");

    let len = calculate_length(&s1);

    println!("The length of '{}' is {}.", s1, len);
}

fn calculate_length(s: &String) -> usize {
    s.len()
}

  s1是一个string对象,内部包含了一个指针变量和data(data即实际的字符串"hello",存在堆里,指针变量存在栈里),底层是用vector实现的。在calculate_length函数的形参s是string引用类型,接收了实参&s1(s1的引用),接受之后,在函数里通过引用s就可以获取main函数里s1的值了。因为传参传的是s1的引用,所以"hello"的所有权没有变,还在s1这,这种情况称为借用。
  另外引用分了两种,①可变引用②不可变引用,如果函数里s是可变引用的话,那么可以在函数里通过对s进行修改操作,达到对main里s1修改的目的。如果函数里s是不可变引用的话,在函数里通过对s进行修改操作会报编译错误。
rust 成员变量分两类:
复制语义: u32, i16 … , 一般给在栈上分配内存, 新变量赋值时, 会发生值拷贝
转移语义: String, 对象. 一般分配在堆上, 有变量赋值时, 没有复制行为, 会转移所有权.

猜你喜欢

转载自blog.csdn.net/qq_40642465/article/details/119485381
今日推荐