国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Rust編程基礎之六大數據類型

開發 前端
程序在索引操作中使用一個無效的值時導致 運行時 錯誤。程序帶著錯誤信息退出,并且沒有執行最后的 println! 語句。當嘗試用索引訪問一個元素時,Rust 會檢查指定的索引是否小于數組的長度。

1.Rust數據類型

在 Rust 中, 每一個值都屬于某一個 數據類型(data type), 這告訴 Rust 它被指定為何種數據,以便明確數據處理方式。我們將看到兩類數據類型子集:標量(scalar)和復合(compound)。

Rust是靜態類型(statically typed)語言,也就是說在編譯時就必須知道所有變量的類型。根據值及其使用方式,編譯器通常可以推斷出我們想要用的類型。當多種類型均有可能時,必須增加類型注解,像這樣:

let u_number: u32 = "42".parse().expect("Not a number!");

如果不像上面的代碼這樣添加類型注解 : u32,Rust 會顯示如下錯誤,這說明編譯器需要我們提供更多信息,來了解想要的類型:

圖片

2.標量類型

標量(scalar)類型代表一個單獨的值。Rust 有四種基本的標量類型:整型、浮點型、布爾類型和字符類型。

2.1 整型

整數 是一個沒有小數部分的數字。下面表格展示了 Rust 內建的整數類型。我們可以使用其中的任一個來聲明一個整數值的類型。

長度

有符號

無符號

8-bit

i8

u8

16-bit

i16

u16

32-bit

i32

u32

64-bit

i64

u64

128-bit

i128

u128

arch

isize

usize

每一個變體都可以是有符號或無符號的,并有一個明確的大小。有符號 和 無符號 代表數字能否為負值,換句話說,這個數字是否有可能是負數(有符號數),或者永遠為正而不需要符號(無符號數)。這有點像在紙上書寫數字:當需要考慮符號的時候,數字以加號或減號作為前綴;然而,可以安全地假設為正數時,加號前綴通常省略。有符號數以補碼形式存儲。

每一個有符號的變體可以儲存包含從 -(2n - 1) 到 2n - 1 - 1 在內的數字,這里 n 是變體使用的位數。所以 i8 可以儲存從 -(27) 到 27 - 1 在內的數字,也就是從 -128 到 127。無符號的變體可以儲存從 0 到 2n - 1 的數字,所以 u8 可以儲存從 0 到 28 - 1 的數字,也就是從 0 到 255。

另外,isize 和 usize 類型依賴運行程序的計算機架構:64 位架構上它們是 64 位的,32 位架構上它們是 32 位的。

可以使用以下表格的任何一種形式編寫數字字面值。請注意可以是多種數字類型的數字字面值允許使用類型后綴,例如 57u8 來指定類型,同時也允許使用 _ 作為分隔符以方便讀數,例如1_000,它的值與你指定的 1000 相同。

數字字面值

例子

Decimal (十進制)

98_222

Hex (十六進制)

0xff

Octal (八進制)

0o77

Binary (二進制)

0b1111_0000

Byte (單字節字符)(僅限于u8)

b'A'

那么該使用哪種類型的數字呢?如果拿不定主意,Rust 的默認類型通常是個不錯的起點,數字類型默認是 i32。isize 或 usize 主要作為某些集合的索引。

2.2 浮點型

Rust 也有兩個原生的 浮點數(floating-point numbers)類型,它們是帶小數點的數字。Rust 的浮點數類型是 f32 和 f64,分別占 32 位和 64 位。默認類型是 f64,因為在現代 CPU 中,它與 f32 速度幾乎一樣,不過精度更高。所有的浮點型都是有符號的。

以下是浮點數的代碼例子:

fn main() {
    let x = 2.0; // f64
    let y: f32 = 3.0; // f32
}

浮點數采用 IEEE-754 標準表示。f32 是單精度浮點數,f64 是雙精度浮點數。

2.3 布爾型

正如其他大部分編程語言一樣,Rust 中的布爾類型有兩個可能的值:true 和 false。Rust 中的布爾類型使用 bool 表示。

布爾型的使用例子如下:

fn main() {
    let t = true;
    let f: bool = false;
}

使用布爾值的主要場景是條件表達式,例如 if 表達式。

2.4 字符類型

Rust 的 char 類型是語言中最原生的字母類型。下面是一些聲明 char 值的例子:

fn main() {
    let c = 'z';
    let z: char = '?';
    let heart_eyed_cat = '??';
}

注意,我們用單引號聲明 char 字面量,而與之相反的是,使用雙引號聲明字符串字面量。Rust 的 char 類型的大小為四個字節 (four bytes),并代表了一個 Unicode 標量值(Unicode Scalar Value),這意味著它可以比 ASCII 表示更多內容。在 Rust 中,帶變音符號的字母(Accented letters),中文、日文、韓文等字符,emoji(繪文字)以及零長度的空白字符都是有效的 char 值。Unicode 標量值包含從 U+0000 到 U+D7FF 和 U+E000 到 U+10FFFF 在內的值。不過,“字符” 并不是一個 Unicode 中的概念,所以人直覺上的 “字符” 可能與 Rust 中的 char 并不符合。

3.復合類型

復合類型(Compound types)可以將多個值組合成一個類型。Rust 有兩個原生的復合類型:元組(tuple)和數組(array)。

3.1 元組類型

元組是一個將多個其他類型的值組合進一個復合類型的主要方式。元組長度固定:一旦聲明,其長度不會增大或縮小。

我們使用包含在圓括號中的逗號分隔的值列表來創建一個元組。元組中的每一個位置都有一個類型,而且這些不同值的類型也不必是相同的。例子如下:

fn main() {
    let tup: (i32, f64, u8) = (500, 6.4, 1);
}

tup 變量綁定到整個元組上,因為元組是一個單獨的復合元素。為了從元組中獲取單個值,可以使用模式匹配(pattern matching)來解構(destructure)元組值,像這樣:

fn main() {
    let tup = (500, 6.4, 1);

    let (x, y, z) = tup;

    println!("The value of y is: {y}");
}

程序首先創建了一個元組并綁定到 tup 變量上。接著使用了 let 和一個模式將 tup 分成了三個不同的變量,x、y 和 z。這叫做 解構(destructuring),因為它將一個元組拆成了三個部分。最后,程序打印出了 y 的值,也就是 6.4。

我們也可以使用點號(.)后跟值的索引來直接訪問它們。例如:

fn main() {
    let x: (i32, f64, u8) = (500, 6.4, 1);

    let five_hundred = x.0;

    let six_point_four = x.1;

    let one = x.2;
}

這個程序創建了一個元組,x,然后使用其各自的索引訪問元組中的每個元素。跟大多數編程語言一樣,元組的第一個索引值是 0。

不帶任何值的元組有個特殊的名稱,叫做 單元(unit) 元組。這種值以及對應的類型都寫作 (),表示空值或空的返回類型。如果表達式不返回任何其他值,則會隱式返回單元值。

3.2 數組類型

另一個包含多個值的方式是 數組(array)。與元組不同,數組中的每個元素的類型必須相同。Rust 中的數組與一些其他語言中的數組不同,Rust 中的數組長度是固定的。

我們將數組的值寫成在方括號內,用逗號分隔:

fn main() {
    let a = [1, 2, 3, 4, 5];
}

當你想要在棧(stack)而不是在堆(heap)上為數據分配空間,或者是想要確保總是有固定數量的元素時,數組非常有用。但是數組并不如 vector 類型靈活。vector 類型是標準庫提供的一個 允許 增長和縮小長度的類似數組的集合類型。當不確定是應該使用數組還是 vector 的時候,那么很可能應該使用 vector。

然而,當你確定元素個數不會改變時,數組會更有用。例如,當你在一個程序中使用月份名字時,你更應趨向于使用數組而不是 vector,因為你確定只會有 12 個元素。

let months = ["January", "February", "March", "April", "May", "June", "July",
              "August", "September", "October", "November", "December"];

可以像這樣編寫數組的類型:在方括號中包含每個元素的類型,后跟分號,再后跟數組元素的數量。

let a: [i32; 5] = [1, 2, 3, 4, 5];

這里,i32 是每個元素的類型。分號之后,數字 5 表明該數組包含五個元素。

你還可以通過在方括號中指定初始值加分號再加元素個數的方式來創建一個每個元素都為相同值的數組:

let a = [3; 5];

變量名為 a 的數組將包含 5 個元素,這些元素的值最初都將被設置為 3。這種寫法與 let a = [3, 3, 3, 3, 3]; 效果相同,但更簡潔。

數組是可以在棧 (stack) 上分配的已知固定大小的單個內存塊。可以使用索引來訪問數組的元素,像這樣:

fn main() {
    let a = [1, 2, 3, 4, 5];

    let first = a[0];
    let second = a[1];
}

在這個例子中,叫做 first 的變量的值是 1,因為它是數組索引 [0] 的值。變量 second 將會是數組索引 [1] 的值 2。

如果我們訪問數組結尾之后的元素會發生什么呢?比如執行以下代碼:

use std::io;

fn main() {
    let a = [1, 2, 3, 4, 5];

    println!("Please enter an array index.");

    let mut index = String::new();

    io::stdin()
        .read_line(&mut index)
        .expect("Failed to read line");

    let index: usize = index
        .trim()
        .parse()
        .expect("Index entered was not a number");

    let element = a[index];

    println!("The value of the element at index {index} is: {element}");
}此代碼編譯成功。如果運行此代碼并輸入 0、1、2、3 或 4,程序將在數組中的索引處打印出相應的值。如果你輸入一個超過數組末端的數字,如 10,你會看到這樣的輸出:
0
1
2
3
4

此代碼編譯成功。如果運行此代碼并輸入 0、1、2、3 或 4,程序將在數組中的索引處打印出相應的值。如果你輸入一個超過數組末端的數字,如 10,你會看到這樣的輸出:

圖片圖片

程序在索引操作中使用一個無效的值時導致 運行時 錯誤。程序帶著錯誤信息退出,并且沒有執行最后的 println! 語句。當嘗試用索引訪問一個元素時,Rust 會檢查指定的索引是否小于數組的長度。如果索引超出了數組長度,Rust 會 panic,這是 Rust 術語,它用于程序因為錯誤而退出的情況。這種檢查必須在運行時進行,特別是在這種情況下,因為編譯器不可能知道用戶在以后運行代碼時將輸入什么值。

這是第一個在實戰中遇到的 Rust 安全原則的例子。在很多底層語言中,并沒有進行這類檢查,這樣當提供了一個不正確的索引時,就會訪問無效的內存。通過立即退出而不是允許內存訪問并繼續執行,Rust會讓程序員避開此類錯誤。

4.總結

在本篇文章中,我們學習了Rust的基本數據類型,包括:整型、浮點型、布爾型、字符串、元祖類型和數組類型。

在下篇文章中,我們將一起學習Rust的函數和控制流。

責任編輯:武曉燕 來源: 二進制空間安全
相關推薦

2023-05-14 18:56:50

Rust數據類型

2017-07-27 14:18:41

大數據挑戰動向

2015-10-14 14:58:13

2025-07-10 07:00:00

CIO數據管理IT領導者

2021-04-28 18:16:24

Rust數據類型

2017-03-01 21:02:11

大數據趨勢

2024-04-18 10:59:08

系統數據數據管理架構

2017-04-12 13:42:53

大數據規則團隊

2011-05-24 13:16:23

2019-07-02 09:23:55

大數據數據分析機器學習

2011-03-08 11:10:39

2011-03-23 14:25:54

2013-12-11 09:41:24

大數據

2016-12-08 08:54:46

大數據預言物聯網

2022-11-02 11:02:52

數據中心數據中心架構

2020-02-17 09:42:09

編程語言JavaWindows

2021-04-05 08:22:54

Python進制數據類型

2024-04-11 13:02:10

Rust數據類型

2020-06-09 12:12:34

大數據安全數據泄露數據安全

2012-02-15 09:28:18

點贊
收藏

51CTO技術棧公眾號

欧美精品18videosex性欧美| 五月天中文字幕一区二区| 人狥杂交一区欧美二区| 女人扒开屁股爽桶30分钟| 黄网站免费在线播放| 精品视频99| 久久久久一区二区三区四区| 亚洲欧洲日韩在线| 亚洲自拍偷拍网址| 九九精品在线观看| 免费无遮挡无码永久视频| 一本到av在线| 成人免费视频77777| 一区二区三区| 99久久伊人久久99| 日韩在线小视频| 亚洲日本欧美在线| 性爱视频在线播放| 视频一区在线视频| 亚洲国产精品电影在线观看| 欧美日韩一区二| 91www在线| 国产麻豆成人传媒免费观看| 色呦呦在线资源| 欧美野外wwwxxx| 久久久久久久久久码影片| 小泽玛利亚视频在线观看| 亚洲影院在线| h精品动漫在线观看| 另类欧美日韩国产在线| 影音先锋欧美精品| 91九色国产视频| 一二三中文字幕在线| 91精品久久久久久久久久久| 国产在线视频你懂| 不卡一本毛片| 精品国产乱码久久久久久果冻传媒 | 精品一区在线播放| 永久免费不卡在线观看黄网站| 日韩动漫一区| 亚洲国产欧美在线人成| 国产成人一区二区三区免费看| av大全在线| 91丨porny丨首页| 91久久精品在线| 成人综合久久| 日韩你懂的在线播放| 国产女教师bbwbbwbbw| 7m精品国产导航在线| 黑人巨大精品欧美一区免费视频| 亚洲欧洲日韩综合二区| 激情视频亚洲| 精品久久久久久久久久久久久 | 欧美日韩视频免费看| 亚洲精品国产精品乱码不99| 国产98在线|日韩| 欧美久久成人| 日韩亚洲欧美中文在线| 超碰在线免费看| 天涯成人国产亚洲精品一区av| 飘雪影视在线观看免费观看 | 久久综合亚洲精品| 91一区二区三区在线观看| 成人国产在线视频| 久久精品久久久| 久久精品国产v日韩v亚洲| 欧美日韩视频精品二区| 成人在线综合网站| 国产一区二区三区四区五区在线| 国产成+人+综合+亚洲欧美| 一级女性全黄久久生活片免费| 美女精品国产| 欧美性生活一级片| 日韩一卡二卡三卡四卡| 四虎av网址| 久久精品国产秦先生| 欧美 日韩 国产精品| 国产精品久久久久婷婷| 亚洲第一在线综合在线| 成人黄色综合网站| 欧美一级二级三级九九九| 成人三级av在线| 精品日韩一区二区三区免费视频| 米奇.777.com| 久久青草欧美一区二区三区| 亚洲黄色成人久久久| 午夜精品在线免费观看| 国产成人综合网站| 九九99九九精彩| 中文字幕高清一区| 中文精品一区二区三区 | 91亚洲精品久久久| 另类综合日韩欧美亚洲| 少妇一级淫免费放| 国产精品一区二区在线播放| 亚洲综合在线网站| 欧美日韩你懂得| 亚洲综合色视频在线观看| 在线不卡免费欧美| 3dmax动漫人物在线看| 欧美成人一级视频| 给我免费播放日韩视频| 最新国产精品亚洲| 日韩极品一区| 欧美一级视频免费在线观看| 韩国理伦片久久电影网| 日韩免费在线播放| 精品视频一区二区三区在线观看| 国产在线高清精品| 红杏视频成人| 成年人精品视频| 欧美成人精品三级网站| 亚洲丁香婷深爱综合| 亚洲深夜福利在线观看| 欧美激情videoshd| 99热这里有精品| 激情小说综合区| 亚洲国产精品黑人久久久| 久久大胆人体| 91精品久久久久久久久久入口| 国产一区二区成人久久免费影院| 日韩av一区二区三区在线 | 国产精品无码免费专区午夜| 奇米888四色在线精品| 日韩在线观看免费全集电视剧网站| 免费观看久久av| 国产精品高潮视频| 波多野结衣在线播放一区| 国产在线无码精品| 国产精品一区一区| 岛国在线视频| 欧美日韩国产另类一区| 国产成人在线中文字幕| 亚洲天堂第一区| 欧美高清视频在线高清观看mv色露露十八 | 九色成人国产蝌蚪91| 久久99久久久久久| 成人做爰69片免费看网站| av一区在线观看| 日韩一区二区三区免费观看| 欧美午夜在线播放| 欧美激情久久久| 国产综合色精品一区二区三区| 成人午夜影视| 亚洲综合日韩在线| 亚洲一二三四久久| 日韩av地址| 日韩av电影免费观看高清| 国产日韩精品视频一区| 在线观看亚洲色图| 夜夜嗨av色综合久久久综合网| 热久久久久久久| 成人性生交大片免费看在线播放| 欧美精品人人做人人爱视频| 欧美视频一区二区三区四区| 亚洲综合中文字幕在线观看| 久久精品国产第一区二区三区最新章节| 精品一区二区免费视频| 91国产成人在线| 九七电影韩国女主播在线观看| 成人免费xxxxx在线观看| 亚洲国产成人porn| 夜夜春成人影院| 91大神网址| 4438成人网| 久久99中文字幕| 欧美色就是色| 天天综合网天天做天天受| 欧美日韩精品在线观看| 欧美精品一区二区三区精品| 国产性一级片| 91影院在线免费观看视频| 色久综合一二码| 亚洲一区免费| 久草免费在线视频| 成人一级生活片| 麻豆国产va免费精品高清在线| 91婷婷韩国欧美一区二区| 成人在线视频你懂的| 精品久久久久久中文字幕2017| 5566成人精品视频免费| 亚洲第一精品在线| 亚洲一区久久| 91精品店在线| 国产成人无码一二三区视频| 欧日韩不卡在线视频| 国产一区二区不卡| 国产69精品久久久久按摩| 凹凸日日摸日日碰夜夜爽1| 欧美一二三区在线观看| 男女性色大片免费观看一区二区| 日韩成人亚洲| 国产毛片毛片| 欧美一级片免费观看| 日韩在线视频线视频免费网站| 亚洲男人的天堂一区二区| 国产精品久久久久久妇女| 在线观看国产一级片| 91在线看网站| 洋洋av久久久久久久一区|