Fork me on GitHub

rust学习(四)变量与数据类型

创建项目

  • cargo new variables
  • cd cargo

变量

编写代码

fn main() {
    let  x: i32 = 12;
    println!("The value of x is: {x}");
    x = 6;
    println!("The value of x is: {x}");
}

这段代码如果在RustRover内会出现错误提示:
image

偶然发现可以查看E0384错误.
ps:如果我们想查看错误示例,可以前往rust官网的错误状态码:https://doc.rust-lang.org/error_codes/E0384.html


修改代码如下:
image

可以正常运行。
image

也就是说,rust变量默认不可变,在某种特定情况下,认为变量可变可以声明mut关键字实现。

常量

通过const关键字可以定义一个常量,常量在定义时必须指定值类型。不允许对常量使用mut关键字,并且常量可以在任何作用域内声明,包括全局作用域。
常量只能被声明为常值表达式,不可以是其他任何只能在运行时计算出的值。
声明它的作用域之中,常量在整个程序生命周期中都有效。

image
image

遮蔽

rust允许我们通过let关键字多次重新声明同名的变量,可以不用考虑命名的困扰。
image

第二个变量遮蔽了第一个变量,任何使用该变量名的行为中都会视为是在使用第二个变量,直到第二个变量自己也被遮蔽或第二个变量的作用域结束。


为了书写数据类型的相关代码,我们使用cargo重新创建一个项目

  • cargo new data_types
  • cd data_types

数据类型

rust中每一个值都有一个特定的数据类型
两类数据类型: 标量和复合类型

标量类型

rust中标量类型代表一个单独的值。rust中有四种基本标量类型:整型、浮点类型、布尔类型和字符类型。

整型
整型是一个没有小数的数,可以分为有符号整数和无符号整数。rust中i表示有符号;u表示无符号。以无符号数为例,例如u8表示8位无符号整数,以此类推有u16,u32,u64,u128,usize。usize的值与操作系统有关,如果是32位操作系统那么就是32位,如果是64位操作系统,那么就是64位。有符号数也是类似i16,i32,i64,i128,isize.默认声明一个整型变量它的类型是i32
在计算机中,有符号数都采用补码的形式表示。
image

note:对于表示范围(如8位无符号整数的表示范围为0255;8位有符号整数的表示范围为-128+127),如果学过计算机组成原理,这部分就十分简单了。

浮点类型
提到浮点数,计算机组成最经典的就是IEEE-754标准。现代计算机中浮点数默认都采用此标准。
rust中的浮点类型有f32f64,默认类型是f64
f32 是单精度浮点数,f64 是双精度浮点数。对应计算机组成原理里面floatdouble类型。

f32为例,32位中第1位为符号位,中间8位数为阶码(移码表示,移码偏移量为127),后面23位数为尾数(原码表示)。
ps:这是复习考研时间的内容,由于这里学的是rust就不过多阐述了嘻嘻!

image


布尔类型
rust中布尔类型的值类型关键字为bool。值有两个truefalse
image

字符类型
Rust 的 char 类型是语言中最原始的字母类型。用单引号声明 char 字面值,而与之相反的是,使用双引号声明字符串字面值
image

复合类型

复合类型可以将多个值组合成一个类型。rust的组合类型有元组tuple和数组array

元组
元组长度固定,一旦声明其长度不会增大也不会缩小。使用包含在圆括号中的逗号分隔的值列表来创建一个元组。元组中的每一个位置都有一个类型,而且这些不同值的类型也不必是相同的。
image

数组
rust中数组内每个元素的类型必须一致,且数组的长度是固定的。

通过let来定义数组: let variable_name: [data_type,size] = [element1,element2,...]

访问数组元素通过数组下标来实现,和其它语言一样,数组下标默认从0开始。

    // 数组中每个元素的值类型都必须一致
    // rust中数组的长度是固定的
    // 数组的类型:[data_type;size] -->  [i32; 5]  i32表示每个元素的类型,分号之后的数字代表数组内的元素个数
    let _arr_data: [i32; 5] = [1, 2, 3, 4, 5];
    // 确保总是有固定数量的元素时,数组非常有用
    let months: [&str; 12] = [
        "January",
        "February",
        "March",
        "April",
        "May",
        "June",
        "July",
        "August",
        "September",
        "October",
        "November",
        "December",
    ];
    // 通过数组下标访问数组元素,下标从0开始
    let jan = months[0];
    println!("The value of jan is: {jan}");

    // 通过在方括号中指定初始值加分号再加元素个数的方式来创建一个每个元素都为相同值的数组
    let _arr = [3;4]; // 变量名为 arr 的数组将包含 4 个元素,这些元素的值最初都将被设置为 3

由于参阅的是书籍内容,示例并没有写太多,需要更多例子求助AI也可以嘿嘿!

posted @ 2025-11-02 15:11  Hui_Li  阅读(10)  评论(0)    收藏  举报