精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Rust 基礎系列 #2: 在 Rust 程序中使用變量和常量

開發
推進你的 Rust 學習,熟悉 Rust 程序的變量和常量。

在 該系列的第一章中,我講述了為什么 Rust 是一門越來越流行的編程語言。我還展示了如何 在 Rust 中編寫 Hello World 程序。

讓我們繼續 Rust 之旅。在本文中,我將向你介紹 Rust 編程語言中的變量和常量。

此外,我還將講解一個稱為“遮蔽shadowing”的新編程概念。

Rust 變量的獨特之處

在編程語言中,變量是指 存儲某些數據的內存地址的一個別名 。

對 Rust 語言來講也是如此。但是 Rust 有一個獨特的“特性”。每個你聲明的變量都是 默認 不可變的immutable 。這意味著一旦給變量賦值,就不能再改變它的值。

這個決定是為了確保默認情況下,你不需要使用 自旋鎖spin lock 或 互斥鎖mutex 等特殊機制來引入多線程。Rust 會保證 安全的并發。由于所有變量(默認情況下)都是不可變的,因此你不需要擔心線程會無意中更改變量值。

這并不是在說 Rust 中的變量就像常量一樣,因為它們確實不是常量。變量可以被顯式地定義為可變的。這樣的變量稱為 可變變量 。

這是在 Rust 中聲明變量的語法:

// 默認情況下不可變
// 初始化值是**唯一**的值
let variable_name = value;
// 使用 'mut' 關鍵字定義可變變量
// 初始化值可以被改變
let mut variable_name = value;

?? 盡管你可以改變可變變量的值,但你不能將另一種數據類型的值賦值給它。

這意味著,如果你有一個可變的浮點型變量,你不能在后面將一個字符賦值給它。

Rust 數據類型概觀

在上一篇文章中,你可能注意到了我提到 Rust 是一種強類型語言。但是在定義變量時,你不需要指定數據類型,而是使用一個通用的關鍵字 let。

Rust 編譯器可以根據賦值給變量的值推斷出變量的數據類型。但是如果你仍然希望明確指定數據類型并希望注釋類型,那么可以這樣做。以下是語法:

let variable_name: data_type = value;

下面是 Rust 編程語言中一些常見的數據類型:

  • 整數類型:分別用于有符號和無符號的 32 位整數的 i32 和 u32
  • 浮點類型:分別用于 32 位和 64 位浮點數的 f32 和 f64
  • 布爾類型bool
  • 字符類型char

我會在下一篇文章中更詳細地介紹 Rust 的數據類型?,F在,這應該足夠了。

?? Rust 并不支持隱式類型轉換。因此,如果你將值 8 賦給一個浮點型變量,你將會遇到編譯時錯誤。你應該賦的值是 8. 或 8.0

Rust 還強制要求在讀取存儲在其中的值之前初始化變量。

{ // 該代碼塊不會被編譯
    let a;
    println!("{}", a); // 本行報錯
    // 讀取一個**未初始化**變量的值是一個編譯時錯誤
}
{ // 該代碼塊會被編譯
    let a;
    a = 128;
    println!("{}", a); // 本行不會報錯
    // 變量 'a' 有一個初始值
}

如果你在不初始化的情況下聲明一個變量,并在給它賦值之前使用它,Rust 編譯器將會拋出一個 編譯時錯誤 。

雖然錯誤很煩人,但在這種情況下,Rust 編譯器強制你不要犯寫代碼時常見的錯誤之一:未初始化的變量。

Rust 編譯器的錯誤信息

來寫幾個程序,你將

  • 通過執行“正常”的任務來理解 Rust 的設計,這些任務實際上是內存相關問題的主要原因
  • 閱讀和理解 Rust 編譯器的錯誤/警告信息

測試變量的不可變性

讓我們故意寫一個試圖修改不可變變量的程序,看看接下來會發生什么。

fn main() {
    let mut a = 172;
    let b = 273;
    println!("a: {a}, b: ");
    a = 380;
    b = 420;
    println!("a: {}, b: {}", a, b);
}

直到第 4 行看起來都是一個簡單的程序。但是在第 7 行,變量 b —— 一個不可變變量 —— 的值被修改了。

注意打印 Rust 變量值的兩種方法。在第 4 行,我將變量括在花括號中,以便打印它們的值。在第 8 行,我保持括號為空,并使用 C 的風格將變量作為參數。這兩種方法都是有效的。(除了修改不可變變量的值,這個程序中的所有內容都是正確的。)

來編譯一下!如果你按照上一章的步驟做了,你已經知道該怎么做了。

$ rustc main.rs
error[E0384]: cannot assign twice to immutable variable `b`
 --> main.rs:7:5
  |
3 |     let b = 273;
  |         -
  |         |
  |         first assignment to `b`
  |         help: consider making this binding mutable: `mut b`
...
7 |     b = 420;
  |     ^^^^^^^ cannot assign twice to immutable variable
error: aborting due to previous error
For more information about this error, try `rustc --explain E0384`.

?? “binding” 一詞是指變量名。但這只是一個簡單的解釋。

這很好的展示了 Rust 強大的錯誤檢查和信息豐富的錯誤信息。第一行展示了阻止上述代碼編譯的錯誤信息:

error[E0384]: cannot assign twice to immutable variable b

這意味著,Rust 編譯器注意到我試圖給變量 b 重新賦值,但變量 b 是一個不可變變量。所以這就是導致這個錯誤的原因。

編譯器甚至可以識別出錯誤發生的確切行和列號。

在顯示 first assignment to b 的行下面,是提供幫助的行。因為我正在改變不可變變量 b 的值,所以我被告知使用 mut 關鍵字將變量 b 聲明為可變變量。

??? 自己實現一個修復來更好地理解手頭的問題。

使用未初始化的變量

現在,讓我們看看當我們嘗試讀取未初始化變量的值時,Rust 編譯器會做什么。

fn main() {
    let a: i32;
    a = 123;
    println!("a: {a}");
    let b: i32;
    println!("b: ");
    b = 123;
}

這里,我有兩個不可變變量 a 和 b,在聲明時都沒有初始化。變量 a 在其值被讀取之前被賦予了一個值。但是變量 b 的值在被賦予初始值之前被讀取了。

來編譯一下,看看結果。

$ rustc main.rs
warning: value assigned to `b` is never read
 --> main.rs:8:5
  |
8 |     b = 123;
  |     ^
  |
  = help: maybe it is overwritten before being read?
  = note: `#[warn(unused_assignments)]` on by default
error[E0381]: used binding `b` is possibly-uninitialized
 --> main.rs:7:19
  |
6 |     let b: i32;
  |         - binding declared here but left uninitialized
7 |     println!("b: ");
  |                   ^ `b` used here but it is possibly-uninitialized
  |
  = note: this error originates in the macro `$crate::format_args_nl` which comes from the expansion of the macro `println` (in Nightly builds, run with -Z macro-backtrace for more info)
error: aborting due to previous error; 1 warning emitted
For more information about this error, try `rustc --explain E0381`.

這里,Rust 編譯器拋出了一個編譯時錯誤和一個警告。警告說變量 b 的值從來沒有被讀取過。

但是這是荒謬的!變量 b 的值在第 7 行被訪問了。但是仔細看;警告是關于第 8 行的。這很令人困惑;讓我們暫時跳過這個警告,繼續看錯誤。

這個錯誤信息說 used binding b is possibly-uninitialized。和之前的例子一樣,Rust 編譯器指出錯誤是由于嘗試在第 7 行讀取變量 b 的值而引起的。讀取變量 b 的值是錯誤的原因是它的值沒有初始化。在 Rust 編程語言中,這是非法的。因此編譯時錯誤出現。

??? 這個錯誤可以很容易地通過交換第 7 和第 8 行的代碼來解決。試一下,看看錯誤是否消失了。

示例程序:交換數字

現在你已經熟悉了常見的變量相關問題,讓我們來看一個交換兩個變量值的程序。

fn main() {
    let mut a = 7186932;
    let mut b = 1276561;
    println!("a: {a}, b: ");
    // 交換變量值
    let temp = a;
    a = b;
    b = temp;
    println!("a: {}, b: {}", a, b);
}

我在這里聲明了兩個變量 a 和 b。這兩個變量都是可變的,因為我希望在后面改變它們的值。我賦予了一些隨機值。最初,我打印了這些變量的值。

然后,在第 8 行,我創建了一個名為 temp 的不可變變量,并將存儲在 a 中的值賦給它。之所以這個變量是不可變的,是因為 temp 的值不會改變。

要交換值,我將變量 b 的值賦給變量 a,在下一行,我將 temp 的值(它包含 a 的值)賦給變量 b?,F在值已經交換了,我打印了變量 a 和 b 的值。

在編譯并執行上面的代碼后,我得到了以下輸出:

a: 7186932, b: 1276561
a: 1276561, b: 7186932

正如你所見,值已經交換了。完美。

使用未使用的變量

當你聲明了一些變量,打算在后面使用它們,但是還沒有使用它們,然后編譯你的 Rust 代碼來檢查一些東西時,Rust 編譯器會警告你。

原因是顯而易見的。不會被使用的變量占用了不必要的初始化時間(CPU 周期)和內存空間。如果不會被使用,為什么要在程序寫上它呢?盡管編譯器確實會優化這一點。但是它仍然是一個問題,因為它會以多余的代碼的形式影響可讀性。

但是,有的時候,你可能會面對這樣的情況:創建一個變量與否不在你的控制之下。比如說,當一個函數返回多個值,而你只需要其中的一些值時。在這種情況下,你不能要求庫維護者根據你的需要調整他們的函數。

所以,在這種情況下,你可以寫一個以下劃線開頭的變量,Rust 編譯器將不再顯示這樣的警告。如果你真的不需要使用存儲在該未使用變量中的值,你可以簡單地將其命名為 _(下劃線),Rust 編譯器也會忽略它!

接下來的程序不僅不會生成任何輸出,而且也不會生成任何警告和/或錯誤消息:

fn main() {
    let _unnecessary_var = 0; // 沒有警告
    let _ = 0.0; // 完全忽略
}

算術運算

數學就是數學,Rust 并沒有在這方面創新。你可以使用在其他編程語言(如 C、C++ 和/或 Java)中使用過的所有算術運算符。

包含可以在 Rust 編程語言中使用的所有運算符和它們的含義的完整列表可以在 這里 找到。

示例程序:一個生銹的溫度計

(LCTT 譯注:這里的溫度計“生銹”了是因為它是使用 Rust(生銹)編寫的,原作者在這里玩了一個雙關。)

接下來是一個典型的程序,它將華氏度轉換為攝氏度,反之亦然。

fn main() {
    let boiling_water_f: f64 = 212.0;
    let frozen_water_c: f64 = 0.0;
    let boiling_water_c = (boiling_water_f - 32.0) * (5.0 / 9.0);
    let frozen_water_f = (frozen_water_c * (9.0 / 5.0)) + 32.0;
    println!(
        "Water starts boiling at {}°C (or {}°F).",
        boiling_water_c, boiling_water_f
    );
    println!(
        "Water starts freezing at {}°C (or {}°F).",
        frozen_water_c, frozen_water_f
    );
}

沒什么大不了的……華氏溫度轉換為攝氏溫度,反之亦然。

正如你在這里看到的,由于 Rust 不允許自動類型轉換,我不得不在整數 32、9 和 5 后放一個小數點。除此之外,這與你在 C、C++ 和/或 Java 中所做的類似。

作為練習,嘗試編寫一個程序,找出給定數中有多少位數字。

常量

如果你有一些編程知識,你可能知道這意味著什么。常量是一種特殊類型的變量,它的值永遠不會改變它保持不變

在 Rust 編程語言中,使用以下語法聲明常量:

const CONSTANT_NAME: data_type = value;

如你所見,聲明常量的語法與我們在 Rust 中看到的變量聲明非常相似。但是有兩個不同之處:

  • 常量的名字需要像 SCREAMING_SNAKE_CASE 這樣。所有的大寫字母和單詞之間用下劃線分隔。
  • 常量的數據類型必須被顯性定義。

變量與常量的對比

你可能在想,既然變量默認是不可變的,為什么語言還要包含常量呢?

接下來這個表格應該可以幫助你消除疑慮。(如果你好奇并且想更好地理解這些區別,你可以看看我的博客,它詳細地展示了這些區別。)

一個展示 Rust 編程語言中變量和常量之間區別的表格

一個展示 Rust 編程語言中變量和常量之間區別的表格

使用常量的示例程序:計算圓的面積

這是一個很直接的關于 Rust 中常量的簡單程序。它計算圓的面積和周長。

fn main() {
    const PI: f64 = 3.14;
    let radius: f64 = 50.0;
    let circle_area = PI * (radius * radius);
    let circle_perimeter = 2.0 * PI * radius;

    println!("有一個周長為 {radius} 厘米的圓");
    println!("它的面積是 {} 平方厘米", circle_area);
    println!(
        "以及它的周長是 {} 厘米",
        circle_perimeter
    );
}

如果運行代碼,將產生以下輸出:

有一個周長為 50 厘米的圓
它的面積是 7850 平方厘米
以及它的周長是 314 厘米

Rust 中的變量遮蔽

如果你是一個 C++ 程序員,你可能已經知道我在說什么了。當程序員聲明一個與已經聲明的變量同名的新變量時,這就是變量遮蔽。

與 C++ 不同,Rust 允許你在同一作用域中執行變量遮蔽!

?? 當程序員遮蔽一個已經存在的變量時,新變量會被分配一個新的內存地址,但是使用與現有變量相同的名稱引用。

來看看它在 Rust 中是如何工作的。

fn main() {
    let a = 108;
    println!("a 的地址: {:p}, a 的值 {a}", &a);
    let a = 56;
    println!("a 的地址: {:p}, a 的值: {a} // 遮蔽后", &a);

    let mut b = 82;
    println!("\nb 的地址: {:p}, b 的值: ", &b);
    let mut b = 120;
    println!("b的地址: {:p}, b的值:  // 遮蔽后", &b);

    let mut c = 18;
    println!("\nc 的地址: {:p}, c的值: {c}", &c);
    c = 29;
    println!("c 的地址: {:p}, c的值: {c} // 遮蔽后", &c);
}

println 語句中花括號內的 :p 與 C 中的 %p 類似。它指定值的格式為內存地址(指針)。

我在這里使用了 3 個變量。變量 a 是不可變的,并且在第 4 行被遮蔽。變量 b 是可變的,并且在第 9 行也被遮蔽。變量 c 是可變的,但是在第 14 行,只有它的值被改變了。它沒有被遮蔽。

現在,讓我們看看輸出。

a 的地址: 0x7ffe954bf614, a 的值 108
a 的地址: 0x7ffe954bf674, a 的值: 56 // 遮蔽后
b 的地址: 0x7ffe954bf6d4, b 的值: 82
b 的地址: 0x7ffe954bf734, b 的值: 120 // 遮蔽后
c 的地址: 0x7ffe954bf734, c 的值: 18
c 的地址: 0x7ffe954bf734, c 的值: 29 // 遮蔽后

來看看輸出,你會發現不僅所有三個變量的值都改變了,而且被遮蔽的變量的地址也不同(檢查十六進制的最后幾個字符)。

變量 a 和 b 的內存地址改變了。這意味著變量的可變性或不可變性并不是遮蔽變量的限制。

總結

本文介紹了 Rust 編程語言中的變量和常量。還介紹了算術運算。

做個總結:

  • Rust 中的變量默認是不可變的,但是可以引入可變性。
  • 程序員需要顯式地指定變量的可變性。
  • 常量總是不可變的,無論如何都需要類型注釋。
  • 變量遮蔽是指使用與現有變量相同的名稱聲明一個  變量。

很好!我相信和 Rust 一起的進展不錯。在下一章中,我將討論 Rust 中的數據類型。敬請關注。

與此同時,如果你有任何問題,請告訴我。

(題圖:MJ/7c5366b8-f926-487e-9153-0a877145ca5)

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2023-06-15 17:00:11

Rust循環

2023-06-23 14:15:09

Rust編程

2023-05-23 18:11:12

Rust數組元組

2023-05-29 16:25:59

Rust函數

2024-01-09 09:27:57

Rust編程泛型

2024-01-07 17:29:10

編程語言線程Rust

2023-04-10 18:03:18

Rust編程語言

2023-07-12 14:13:03

BashLinux

2024-03-26 09:25:35

RustSerde重命名

2023-05-14 18:56:50

Rust數據類型

2023-06-11 17:25:13

Rust條件語句

2024-09-06 11:34:15

RustAI語言

2024-04-07 00:00:10

Rust枚舉C代碼

2023-05-26 17:21:15

PythonRust

2021-04-19 20:36:06

存儲Rust變量

2020-10-21 14:54:02

RustGolang開發

2023-10-30 23:38:03

Rust編程基礎

2021-07-07 21:40:46

Rust函數勸退

2023-11-30 10:42:43

Rust命令行參數

2024-09-13 09:55:38

RustP2P網
點贊
收藏

51CTO技術棧公眾號

2021中文字幕一区亚洲| 大片网站久久| 一本大道综合伊人精品热热| 欧洲亚洲一区| 91免费视频播放| 午夜精品亚洲| 亚洲人成自拍网站| 爱情岛论坛亚洲自拍| 亚洲黄色中文字幕| 亚洲天堂a在线| 久久精品丝袜高跟鞋| 一级特黄aa大片| 日韩午夜电影| 久热爱精品视频线路一| 在线不卡av电影| 中文在线综合| 欧美日产国产精品| 99999精品视频| 午夜影院免费在线| 国产三区在线成人av| 国产精品国产三级欧美二区 | 色偷偷88欧美精品久久久| 欧美另类videos| 成人亚洲综合天堂| 97se狠狠狠综合亚洲狠狠| 亚洲最大的av网站| 超碰在线免费97| 亚洲一区欧美激情| 欧美精品在线观看91| 黄色免费一级视频| 亚洲精品小区久久久久久| 精品国一区二区三区| 一级做a爱视频| 国产成人a视频高清在线观看| 欧美日韩中文在线观看| 性高湖久久久久久久久aaaaa| 色多多视频在线观看| 国产香蕉久久精品综合网| 精品久久久久久一区| 成人小说亚洲一区二区三区| 国产美女精品一区二区三区| 国产精品专区第二| 波多野结衣在线电影| 久久久久免费| 国产精品99久久久久久人| 国产精品视频久久久久久久| 伊人精品在线| 久久久久久午夜| 久草视频在线资源| 午夜国产欧美理论在线播放 | 日韩三级免费观看| 在线观看中文av| 高清一区二区| 日韩欧美亚洲国产另类| 欧美一级大片免费看| 久久久久亚洲精品中文字幕| 日韩一区二区三区视频在线 | 99re热这里只有精品视频| 成人av免费在线看| 国产综合视频在线| 波多野结衣中文一区| 国产精品免费一区二区三区在线观看 | 国内精品99| 欧美精品久久久久久久免费观看| 69av.com| 日韩一级大片| 国产精品av在线| 国产又大又黄的视频| 国产一区二区日韩精品| 国产超碰91| 天堂91在线| 国产午夜久久久久| 一区二区日本| 国产美女一区视频| 精品国产91久久久| www.色就是色| 免费一区二区三区在线视频| 精品国产凹凸成av人导航| 国产夫妻性爱视频| 日本午夜一区| 欧美国产日韩一区二区三区| 欧美一二三区视频| 日本人妖一区二区| 3d动漫啪啪精品一区二区免费| 二区三区在线视频| 国产欧美日韩在线看| 日日噜噜夜夜狠狠久久丁香五月| 国产美女一区视频| 欧美性猛交一区二区三区精品| 在线视频日韩欧美| 老牛国内精品亚洲成av人片| 在线视频欧美日韩精品| 69av视频在线| 日韩在线播放一区二区| 91手机视频在线观看| 丝袜视频国产在线播放| 中文字幕日本乱码精品影院| 免费毛片网站在线观看| 国产精品麻豆成人av电影艾秋| 欧美变态凌虐bdsm| 永久免费av无码网站性色av| 欧美成人tv| 国产精品久久久久不卡| 乱色精品无码一区二区国产盗| 国产午夜精品一区二区三区嫩草| av日韩在线看| 电影亚洲一区| 亚洲精品美女久久| 国产成人自拍网站| 国产精品日韩| 超碰97网站| 美女隐私在线观看| 色综合视频在线观看| 亚洲精品在线网址| 日韩欧美在线中字| 日本国产欧美一区二区三区| 亚洲av少妇一区二区在线观看| 国产欧美日韩卡一| 国产美女网站在线观看| 欧州一区二区三区| 日韩在线播放视频| 久久久蜜桃一区二区| av一区二区三区四区| 狠狠干视频网站| 国产a亚洲精品| 国产亚洲激情在线| 亚洲午夜18毛片在线看| 成人午夜精品一区二区三区| 色哺乳xxxxhd奶水米仓惠香| 久久亚洲精品中文字幕| 国产一区二区美女视频| 五月婷婷开心网| 岛国一区二区三区| 成年丰满熟妇午夜免费视频 | gogo在线观看| 欧美老女人在线| 午夜影院黄色片| 久久影院亚洲| 老牛影视免费一区二区| 97人人在线视频| 日韩av在线免费观看一区| 久久精品国产亚洲AV无码男同| 国产福利91精品| 伊人久久在线观看| 视频一区日韩| 色综合色综合久久综合频道88| 国产三级精品在线观看| 综合久久国产九一剧情麻豆| 国产成人美女视频| 欧美jizz| 5566av亚洲| 日韩专区av| 亚洲电影天堂av | 欧美日韩国产综合久久| 亚洲欧美综合7777色婷婷| 九九在线精品视频| 日韩人妻精品一区二区三区| 国产在线视频欧美一区| 欧美日韩ab片| 成人午夜视频一区二区播放| 亚洲 欧美综合在线网络| 国产又粗又猛又色| 国产精品毛片在线看| 日本一区二区三区四区高清视频| 校园春色亚洲色图| 日韩中文字幕国产精品| 国产三级伦理片| 精品久久久久久久久久ntr影视| 最近中文字幕无免费| 肉色丝袜一区二区| 一本一道久久久a久久久精品91 | 日本一区二区在线| 美女色狠狠久久| 久久天天躁狠狠躁夜夜av| 国产喷水吹潮视频www| 一区二区三区四区国产精品| 艳妇乳肉亭妇荡乳av| 蜜桃av一区| 性做爰过程免费播放| 91久久偷偷做嫩草影院电| 8090成年在线看片午夜| 福利在线播放| 欧美成人性战久久| 无码人妻丰满熟妇区五十路 | 国产午夜视频在线播放| 久久人人97超碰com| 91 在线视频观看| 精品二区久久| 神马影院午夜我不卡影院| 国产美女亚洲精品7777| 国产91精品久久久久| 亚洲免费视频一区二区三区| 精品国产青草久久久久福利| 中文字幕一区二区人妻视频| 亚洲精品视频观看| 亚洲一区二区三区蜜桃| 国产乱码精品一区二区三区五月婷 | 欧美在线观看一区二区| 久一区二区三区| 欧美激情一区在线观看| 在线播放第一页| 美女一区二区视频| 日本福利视频在线| 亚洲综合中文| 日韩精品不卡| 欧美三级午夜理伦三级小说| 91九色国产社区在线观看| 芒果视频成人app| 欧美丰满少妇xxxxx| 啊v视频在线| 国产视频精品自拍| www日本高清| 欧美日韩黄色影视| 欧美日韩a v| 同产精品九九九| 69xx绿帽三人行| 国产精品色婷婷久久58| 欧美熟妇一区二区| 国产精品亚洲一区二区三区在线| 91香蕉视频污版| 中日韩视频在线观看| 嫩草影院中文字幕| 欧美肥老太太性生活| 欧美三级网色| 午夜欧洲一区| 国产精品手机视频| 中文无码日韩欧| 91精品久久香蕉国产线看观看| av免费在线一区| 秋霞成人午夜鲁丝一区二区三区| a级片在线免费观看| 欧美日本国产在线| 色婷婷在线播放| 美日韩精品免费观看视频| 免费高清在线观看| 国产亚洲精品日韩| 国产成人天天5g影院在线观看| 亚洲精品国产欧美| 色综合免费视频| 欧美精品一区二区不卡 | 国产成人77亚洲精品www| 国产成人免费av| 黄瓜视频成人app免费| 日韩69视频在线观看| 成人影院入口| 国产91色在线|| 日韩经典一区| 国产精品综合不卡av| 日本成人一区二区| 成人欧美在线观看| 欧洲大片精品免费永久看nba| 91黄在线观看| 高潮按摩久久久久久av免费| 国产精品白丝jk白祙| 大桥未久女教师av一区二区| 国产欧美一区二区三区不卡高清| 精品国产一区二区三区不卡蜜臂| 国产精品一区二区三区免费| 免费日韩一区二区三区 | 国产精品久久久久蜜臀| 一级全黄肉体裸体全过程| 亚洲精品网址| 国产aaa免费视频| 国产精品一区亚洲| 黄色国产精品视频| 欧美aaa在线| 欧美国产日韩在线视频| 成人免费看的视频| 国产精品毛片一区二区| 国产精品视频麻豆| 欧美日韩中文字幕在线观看 | 777777av| 久久精品理论片| 亚洲一区和二区| 久久一区二区三区国产精品| 久久视频一区二区三区| 亚洲精品网站在线观看| 国产精品100| 欧美日韩aaaaaa| 欧美自拍第一页| 亚洲最新中文字幕| 污污网站在线看| 欧美一级电影免费在线观看| 亚洲精品aaa| 国产原创精品| 91中文字幕精品永久在线| 日韩xxxx视频| 麻豆精品在线观看| 精品国产乱码久久久久夜深人妻| 久久精品亚洲麻豆av一区二区 | 国产一级黄色录像| 国产日韩亚洲欧美综合| 青娱乐国产在线视频| 在线亚洲高清视频| 性少妇videosexfreexxx片| 亚洲精品在线观看www| 国产欧美久久久久久久久| 81精品国产乱码久久久久久| 国产区一区二| 欧美三级华人主播| 一区在线视频| www.午夜av| 久久久久久久精| 九九免费精品视频| 欧美日韩综合在线| 婷婷在线免费观看| 美女999久久久精品视频 | 在线精品视频免费观看| 免费看国产片在线观看| 日韩一区二区欧美| 欧美电影网站| 精品国产乱码久久久久久丨区2区| 欧美3p视频| 国产一区二区三区精彩视频 | 成全电影大全在线观看| 国产欧美日韩专区发布| 欧美日韩xxxx| 精品国产一二三四区| 国产成人av电影在线观看| 无码人妻精品中文字幕| 欧美在线观看禁18| 蝌蚪视频在线播放| 午夜精品一区二区三区在线| 久久综合偷偷噜噜噜色| 亚洲一区二区三区精品视频| 久久午夜视频| 强伦人妻一区二区三区| 欧美色欧美亚洲高清在线视频| 成人小说亚洲一区二区三区| 欧美日韩999| 136导航精品福利| av影院在线播放| 国产精品一级黄| 免费一级片视频| 欧美大片在线观看一区二区| 精品176二区| 亚洲aaa激情| 欧美成人高清| 佐佐木明希电影| 亚洲国产一二三| 少妇人妻偷人精品一区二区| 久久免费视频在线| 日韩av网站在线免费观看| 成品人视频ww入口| 99在线精品观看| 国产精品自拍99| 国产亚洲精品91在线| jizz久久久久久| 在线观看一区二区三区三州| 激情国产一区二区| www.超碰在线观看| 精品久久久久久亚洲综合网 | 国产福利在线| 国产日韩中文在线| 在线电影一区二区| 国产无套精品一区二区三区| 亚洲一区二区三区美女| 亚洲人午夜射精精品日韩| 26uuu亚洲国产精品| 国产在线观看91一区二区三区| 国产免费人做人爱午夜视频| 中文字幕免费在线观看视频一区| 国产又大又黑又粗| 欧美日韩高清在线观看| 人妖一区二区三区| 美女网站免费观看视频| 亚洲色图在线播放| 成人免费视频国产免费麻豆| 欧美做受高潮电影o| 日韩情爱电影在线观看| 亚洲一区二区三区三州| 精品人伦一区二区三区蜜桃网站 | 欧美高清在线视频| 国产肥老妇视频| 国产91ⅴ在线精品免费观看| 欧美激情理论| 少妇伦子伦精品无吗| 色综合久久久久| 黄黄的网站在线观看| 久久精品ww人人做人人爽| 另类中文字幕网| 国产真实的和子乱拍在线观看| 亚洲人a成www在线影院| 欧美在线一级| 亚欧无线一线二线三线区别| 中文一区一区三区高中清不卡| 丰满熟妇乱又伦| 国产成人精品免费视频| 欧美在线黄色| 人妻aⅴ无码一区二区三区| 欧美一区二区三区思思人| 午夜裸体女人视频网站在线观看| 午夜精品区一区二区三| 成人一区二区三区在线观看| 中文字幕一区2区3区| 久久久久久久999| 天天影视天天精品| 国精产品一区一区三区免费视频| 在线不卡中文字幕播放| 二区三区不卡|