From d4836a12159381e0ca13b93f1437878fb2ce9b96 Mon Sep 17 00:00:00 2001 From: Kirin Date: Sat, 5 Nov 2022 13:28:22 +0800 Subject: [PATCH] Update struct.md (#6) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 增加章节 ## 结构体的内存排列 中结构体字段所有权转移的说明与示例代码 --- src/basic/compound-type/struct.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/basic/compound-type/struct.md b/src/basic/compound-type/struct.md index bddada23..5fa749ad 100644 --- a/src/basic/compound-type/struct.md +++ b/src/basic/compound-type/struct.md @@ -188,6 +188,17 @@ println!("{:?}", user1); 该图片也侧面印证了:**把结构体中具有所有权的字段转移出去后,将无法再访问该字段,但是可以正常访问其它的字段**。 +例如:将上述代码中获取名字和数据长度的部分,改为不使用借用引用,则无法再访问该字段。 + +```rust + let f1_name = f1.name; + // let f1_length = f1.data.len(); 注:此处不访问 f1 的 data 部分 + ... + println!("{:?}", f1); // 可以正常访问 + println!("filename is {}", f1.name); // f1.name 不可以访问 + println!("there are {} bytes long", f1.data.len()); // f1.data 可以访问 +``` + ## 元组结构体(Tuple Struct) 结构体必须要有名称,但是结构体的字段可以没有名称,这种结构体长得很像元组,因此被称为元组结构体,例如: