Rust编程基础与内存管理
立即解锁
发布时间: 2025-09-04 01:50:44 阅读量: 3 订阅数: 20 AIGC 


Rust编程核心概念精讲
# Rust编程基础与内存管理
## 1. Rust的数据类型
### 1.1 基本数据类型
#### 1.1.1 浮点型
Rust提供了两种浮点数据类型:`f32`和`f64`,分别为32位和64位,也被称为单精度和双精度值。默认情况下,浮点变量的类型是`f64`。示例代码如下:
```rust
fn main() {
let x = 5.0;
let y: f32 = 5.0;
}
```
在上述示例中,`x`是`f64`类型,`y`是`f32`类型。
#### 1.1.2 布尔型
布尔数据类型存储两个可能的值:`true`和`false`,大小为1字节。通常通过条件表达式使用,使用`bool`关键字声明。示例代码如下:
```rust
fn main() {
let t = true;
let f: bool = false;
}
```
#### 1.1.3 字符型
`char`数据类型用于表示单个字符,如字母或数字。Rust中的字符是Unicode标量值,大小为4字节,与C++等语言不同,C++中的字符由1字节表示。字符字面量用单引号括起来。示例代码如下:
```rust
fn main() {
let c1 = 'a';
let c2 = '5';
let c3 = '\u{263A}';
println!("c1 = {}, c2 = {}, c3 = {}", c1, c2, c3);
}
```
输出结果:`c1 = a, c2 = 5, c3 = ☺`,其中Unicode值`263A`对应笑脸符号`☺`。
### 1.2 复合数据类型
#### 1.2.1 元组
元组是一种复合数据类型,用于将相关项组合在一起。与数组不同,元组可以包含不同的数据类型。元组存储在固定长度的连续内存段中,使用括号内逗号分隔的值列表创建,采用基于零的索引。示例代码如下:
```rust
fn main() {
let tup = (10, 'a', 10.5);
let first_elem = tup.0;
println!("{}", first_elem);
}
```
输出结果:`10`。默认情况下,Rust以默认类型存储元组元素,如需以不同方式存储,需显式注释类型。若要更改元组的值,必须将元组声明为可变的。
#### 1.2.2 数组
数组是具有相同数据类型的元素集合,元素按特定顺序存储在连续的内存段中,长度固定,编译器需要知道要分配多少内存,不能动态调整大小,采用基于零的索引。示例代码如下:
```rust
fn main() {
let arr = [10, 20, 30];
let num1 = arr[0];
println!("num1 = {}", num1);
}
```
输出结果:`num1 = 10`。如果要修改数组中的值,必须将数组声明为可变的。若声明数组时没有一组值进行初始化,只要指定数据类型,Rust允许声明新变量而不赋值,但在初始化之前读取值是不允许的。示例代码如下:
```rust
let arr: [i32; 10];
// 尝试访问未初始化的数组元素会导致编译错误
println!("arr[0] = {}", arr[0]);
```
输出结果:`error[E0381]: use of possibly-uninitialized variable: `arr``。可以使用重复表达式初始化数组,示例代码如下:
```rust
arr = [0; 10];
```
如果尝试访问数组超出最后一个元素,会导致编译错误或运行时恐慌,这体现了Rust对内存安全的保障。
## 2. 代码注释
注释允许在代码中添加额外的解释,使代码更易于理解,编译器会忽略注释。注释分为单行注释和多行注释。单行注释以双斜杠`//`开头,多行注释用`/*`和`*/`括起来。示例代码如下:
```rust
// 这是一个单行注释
let x = 10; // 这也是一个单行注释
/* 这是
一个多行
注释 */
```
## 3. 函数
函数是将相关代码组织成可重用模块的方式。每个Rust程序至少有一个`main()`函数,作为程序执行的入口点。声明函数使用`fn`关键字,后跟函数名、括号和可选的参数,必须指定每个参数的类型,函数体用花括号括起来。示例代码如下:
```rust
fn main() {
first_func();
second_func(10, 20);
}
// first_func: 无参数
fn first_func() {
println!("first_func called…");
}
// second_func : 两个参数,类型分别为i32和u8
fn second_func(x : i32, y : u8) {
println!("second_func called… {}, {}", x, y);
}
```
输出结果:
```
first_func called…
second_func called… 10, 20
```
函数体由语句和表达式组成。语句执行某些操作但不返回值,以分号结尾;表达式会计算产生一个结果值,不以分号结尾。函数可以返回值,若函数需要返回值,必须在`->`后声明返回值的类型。示例代码如下:
```rust
fn main() {
let sum = sum(10, 20);
println!("Sum of 10 and 20 = {}", sum);
}
fn sum(a : i32, b : i32) -> i32 {
return a + b;
}
```
输出结果:`Sum of 10 and 20 = 30`。也可以使用元组返回多个值,函数甚至可以在没有显式`return`语句的情况下返回值,函数体中的最后一个表达式的结果将被返回。
## 4. 控制流
### 4.1 if表达式
用于有条件地执
0
0
复制全文
相关推荐









