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, 对象. 一般分配在堆上, 有变量赋值时, 没有复制行为, 会转移所有权.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值