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

C語(yǔ)言結(jié)構(gòu)體里的成員數(shù)組和指針

開(kāi)發(fā) 后端 開(kāi)發(fā)工具
單看這文章的標(biāo)題,你可能會(huì)覺(jué)得好像沒(méi)什么意思。你先別下這個(gè)結(jié)論,相信這篇文章會(huì)對(duì)你理解C語(yǔ)言有幫助。這篇文章產(chǎn)生的背景是在微博上,看到@Laruence同學(xué)出了一個(gè)關(guān)于C語(yǔ)言的題,微博鏈接。微博截圖如下。我覺(jué)得好多人對(duì)這段代碼的理解還不夠深入,所以寫(xiě)下了這篇文章。

單看這文章的標(biāo)題,你可能會(huì)覺(jué)得好像沒(méi)什么意思。你先別下這個(gè)結(jié)論,相信這篇文章會(huì)對(duì)你理解C語(yǔ)言有幫助。這篇文章產(chǎn)生的背景是在微博上,看到@Laruence同學(xué)出了一個(gè)關(guān)于C語(yǔ)言的題,微博鏈接。微博截圖如下。我覺(jué)得好多人對(duì)這段代碼的理解還不夠深入,所以寫(xiě)下了這篇文章。

zero_array

為了方便你把代碼copy過(guò)去編譯和調(diào)試,我把代碼列在下面:

  1. #include <stdio.h>   
  2. struct str{   
  3.     int len;   
  4.     char s[0];   
  5. };   
  6.     
  7. struct foo {   
  8.     struct str *a;   
  9. };   
  10.     
  11. int main(int argc, char** argv) {   
  12.     struct foo f={0};   
  13.     if (f.a->s) {   
  14.         printf( f.a->s);   
  15.     }   
  16.     return 0;   

你編譯一下上面的代碼,在VC++和GCC下都會(huì)在14行的printf處crash掉你的程序。@Laruence 說(shuō)這個(gè)是個(gè)經(jīng)典的坑,我覺(jué)得這怎么會(huì)是經(jīng)典的坑呢?上面這代碼,你一定會(huì)問(wèn),為什么if語(yǔ)句判斷的不是f.a?而是f.a里面的數(shù)組?寫(xiě)這樣代碼的人腦子里在想什么?還是用這樣的代碼來(lái)玩票?不管怎么樣,我個(gè)人覺(jué)得這主要還是對(duì)C語(yǔ)言理解不深,如果這算坑的話(huà),那么全都是坑。

 

接下來(lái),你調(diào)試一下,或是你把14行的printf語(yǔ)句改成:

  1. printf("%x\n", f.a->s); 

你會(huì)看到程序不crash了。程序輸出:4。 這下你知道了,訪問(wèn)0×4的內(nèi)存地址,不crash才怪。于是,你一定會(huì)有如下的問(wèn)題:

1)為什么不是 13行if語(yǔ)句出錯(cuò)?f.a被初始化為空了嘛,用空指針訪問(wèn)成員變量為什么不crash?

2)為什么會(huì)訪問(wèn)到了0×4的地址?靠,4是怎么出來(lái)的?

3)代碼中的第4行,char s[0] 是個(gè)什么東西?零長(zhǎng)度的數(shù)組?為什么要這樣玩?

讓我們從基礎(chǔ)開(kāi)始一點(diǎn)一點(diǎn)地來(lái)解釋C語(yǔ)言中這些詭異的問(wèn)題。

結(jié)構(gòu)體中的成員

首先,我們需要知道——所謂變量,其實(shí)是內(nèi)存地址的一個(gè)抽像名字罷了。在靜態(tài)編譯的程序中,所有的變量名都會(huì)在編譯時(shí)被轉(zhuǎn)成內(nèi)存地址。機(jī)器是不知道我們?nèi)〉拿值模恢赖刂贰?/p>

所以有了——棧內(nèi)存區(qū),堆內(nèi)存區(qū),靜態(tài)內(nèi)存區(qū),常量?jī)?nèi)存區(qū),我們代碼中的所有變量都會(huì)被編譯器預(yù)先放到這些內(nèi)存區(qū)中。

有了上面這個(gè)基礎(chǔ),我們來(lái)看一下結(jié)構(gòu)體中的成員的地址是什么?我們先簡(jiǎn)單化一下代碼:

  1. struct test{   
  2.     int i;   
  3.     char *p;   
  4. }; 

上面代碼中,test結(jié)構(gòu)中i和p指針,在C的編譯器中保存的是相對(duì)地址——也就是說(shuō),他們的地址是相對(duì)于struct test的實(shí)例的。如果我們有這樣的代碼:

  1. struct test t; 

我們用gdb跟進(jìn)去,對(duì)于實(shí)例t,我們可以看到:

  1. # t實(shí)例中的p就是一個(gè)野指針   
  2. (gdb) p t   
  3. $1 = {i = 0, c = 0 '\000', d = 0 '\000', p = 0x4003e0 "1\355I\211\..."}   
  4.     
  5. # 輸出t的地址   
  6. (gdb) p &t   
  7. $2 = (struct test *) 0x7fffffffe5f0   
  8.     
  9. #輸出(t.i)的地址   
  10. (gdb) p &(t.i)   
  11. $3 = (char **) 0x7fffffffe5f0   
  12.     
  13. #輸出(t.p)的地址   
  14. (gdb) p &(t.p)   
  15. $4 = (char **) 0x7fffffffe5f4 

我們可以看到,t.i的地址和t的地址是一樣的,t.p的址址相對(duì)于t的地址多了個(gè)4。說(shuō)白了,t.i 其實(shí)就是(&t + 0×0), t.p 的其實(shí)就是 (&t + 0×4)。0×0和0×4這個(gè)偏移地址就是成員i和p在編譯時(shí)就被編譯器給hard code了的地址。于是,你就知道,不管結(jié)構(gòu)體的實(shí)例是什么——訪問(wèn)其成員其實(shí)就是加成員的偏移量

下面我們來(lái)做個(gè)實(shí)驗(yàn):

  1. struct test{   
  2.     int i;   
  3.     short c;   
  4.     char *p;   
  5. };   
  6.     
  7. int main(){   
  8.     struct test *pt=NULL;   
  9.     return 0;   

編譯后,我們用gdb調(diào)試一下,當(dāng)初始化pt后,我們看看如下的調(diào)試:(我們可以看到就算是pt為NULL,訪問(wèn)其中的成員時(shí),其實(shí)就是在訪問(wèn)相對(duì)于pt的內(nèi)址)

  1. (gdb) p pt   
  2. $1 = (struct test *) 0x0   
  3. (gdb) p pt->i   
  4. Cannot access memory at address 0x0   
  5. (gdb) p pt->c   
  6. Cannot access memory at address 0x4   
  7. (gdb) p pt->p   
  8. Cannot access memory at address 0x8 

注意:上面的pt->p的偏移之所以是0×8而不是0×6,是因?yàn)閮?nèi)存對(duì)齊了(我在64位系統(tǒng)上)。關(guān)于內(nèi)存對(duì)齊,可參看《深入理解C語(yǔ)言》一文。

好了,現(xiàn)在你知道為什么原題中會(huì)訪問(wèn)到了0×4的地址了吧,因?yàn)槭窍鄬?duì)地址。

相對(duì)地址有很好多處,其可以玩出一些有意思的編程技巧,比如把C搞出面向?qū)ο笫降母杏X(jué)來(lái),你可以參看我正好11年前的文章《用C寫(xiě)面向?qū)ο竦某绦?/a>》(用指針類(lèi)型強(qiáng)轉(zhuǎn)的危險(xiǎn)玩法——相對(duì)于C++來(lái)說(shuō),C++編譯器幫你管了繼承和虛函數(shù)表,語(yǔ)義也清楚了很多)

指針和數(shù)組的差別

有了上面的基礎(chǔ)后,你把源代碼中的struct str結(jié)構(gòu)體中的char s[0];改成char *s;試試看,你會(huì)發(fā)現(xiàn),在13行if條件的時(shí)候,程序因?yàn)镃annot access memory就直接掛掉了。為什么聲明成char s[0],程序會(huì)在14行掛掉,而聲明成char *s,程序會(huì)在13行掛掉呢?那么char *s 和 char s[0]有什么差別呢

在說(shuō)明這個(gè)事之前,有必要看一下匯編代碼,用GDB查看后發(fā)現(xiàn):

  • 對(duì)于char s[0]來(lái)說(shuō),匯編代碼用了lea指令,lea   0×04(%rax),   %rdx
  • 對(duì)于char*s來(lái)說(shuō),匯編代碼用了mov指令,mov 0×04(%rax),   %rdx

lea全稱(chēng)load effective address,是把地址放進(jìn)去,而mov則是把地址里的內(nèi)容放進(jìn)去。所以,就crash了。

從這里,我們可以看到,訪問(wèn)成員數(shù)組名其實(shí)得到的是數(shù)組的相對(duì)地址,而訪問(wèn)成員指針其實(shí)是相對(duì)地址里的內(nèi)容(這和訪問(wèn)其它非指針或數(shù)組的變量是一樣的)

換句話(huà)說(shuō),對(duì)于數(shù)組 char s[10]來(lái)說(shuō),數(shù)組名 s 和 &s 都是一樣的(不信你可以自己寫(xiě)個(gè)程序試試)。在我們這個(gè)例子中,也就是說(shuō),都表示了偏移后的地址。這樣,如果我們?cè)L問(wèn) 指針的地址(或是成員變量的地址),那么也就不會(huì)讓程序掛掉了。

正如下面的代碼,可以運(yùn)行一點(diǎn)也不會(huì)crash掉(你匯編一下你會(huì)看到用的都是lea指令):

  1. struct test{   
  2.     int i;   
  3.     short c;   
  4.     char *p;   
  5.     char s[10];   
  6. };   
  7.     
  8. int main(){   
  9.     struct test *pt=NULL;   
  10.     printf("&s = %x\n", pt->s); //等價(jià)于 printf("%x\n", &(pt->s) );   
  11.     printf("&i = %x\n", &pt->i); //因?yàn)椴僮鞣麅?yōu)先級(jí),我沒(méi)有寫(xiě)成&(pt->i)   
  12.     printf("&c = %x\n", &pt->c);   
  13.     printf("&p = %x\n", &pt->p);   
  14.     return 0;   

看到這里,你覺(jué)得這能算坑嗎?不要出什么事都去怪語(yǔ)言,想想是不是問(wèn)題出在自己身上。

#p#

關(guān)于零長(zhǎng)度的數(shù)組

首先,我們要知道,0長(zhǎng)度的數(shù)組在ISO C和C++的規(guī)格說(shuō)明書(shū)中是不允許的。這也就是為什么在VC++2012下編譯你會(huì)得到一個(gè)警告:“arning C4200: 使用了非標(biāo)準(zhǔn)擴(kuò)展 : 結(jié)構(gòu)/聯(lián)合中的零大小數(shù)組”。

那么為什么gcc可以通過(guò)而連一個(gè)警告都沒(méi)有?那是因?yàn)間cc 為了預(yù)先支持C99的這種玩法,所以,讓“零長(zhǎng)度數(shù)組”這種玩法合法了。關(guān)于GCC對(duì)于這個(gè)事的文檔在這里:“Arrays of Length Zero”,文檔中給了一個(gè)例子(我改了一下,改成可以運(yùn)行的了):

  1. #include <stdlib.h>   
  2. #include <string.h>   
  3.     
  4. struct line {   
  5.    int length;   
  6.    char contents[0]; // C99的玩法是:char contents[]; 沒(méi)有指定數(shù)組長(zhǎng)度   
  7. };   
  8.     
  9. int main(){   
  10.     int this_length=10;   
  11.     struct line *thisline = (struct line *)   
  12.                      malloc (sizeof (struct line) + this_length);   
  13.     thisline->length = this_length;   
  14.     memset(thisline->contents, 'a', this_length);   
  15.     return 0;   

看到這里,你覺(jué)得這能算坑嗎?不要出什么事都去怪語(yǔ)言,想想是不是問(wèn)題出在自己身上。

關(guān)于零長(zhǎng)度的數(shù)組

首先,我們要知道,0長(zhǎng)度的數(shù)組在ISO C和C++的規(guī)格說(shuō)明書(shū)中是不允許的。這也就是為什么在VC++2012下編譯你會(huì)得到一個(gè)警告:“arning C4200: 使用了非標(biāo)準(zhǔn)擴(kuò)展 : 結(jié)構(gòu)/聯(lián)合中的零大小數(shù)組”。

那么為什么gcc可以通過(guò)而連一個(gè)警告都沒(méi)有?那是因?yàn)間cc 為了預(yù)先支持C99的這種玩法,所以,讓“零長(zhǎng)度數(shù)組”這種玩法合法了。關(guān)于GCC對(duì)于這個(gè)事的文檔在這里:“Arrays of Length Zero”,文檔中給了一個(gè)例子(我改了一下,改成可以運(yùn)行的了):

  1. #include <stdlib.h>   
  2. #include <string.h>   
  3.     
  4. struct line {   
  5.    int length;   
  6.    char contents[0]; // C99的玩法是:char contents[]; 沒(méi)有指定數(shù)組長(zhǎng)度   
  7. };   
  8.     
  9. int main(){   
  10.     int this_length=10;   
  11.     struct line *thisline = (struct line *)   
  12.                      malloc (sizeof (struct line) + this_length);   
  13.     thisline->length = this_length;   
  14.     memset(thisline->contents, 'a', this_length);   
  15.     return 0;   

上面這段代碼的意思是:我想分配一個(gè)不定長(zhǎng)的數(shù)組,于是我有一個(gè)結(jié)構(gòu)體,其中有兩個(gè)成員,一個(gè)是length,代表數(shù)組的長(zhǎng)度,一個(gè)是contents,代碼數(shù)組的內(nèi)容。后面代碼里的 this_length(長(zhǎng)度是10)代表是我想分配的數(shù)據(jù)的長(zhǎng)度。(這看上去是不是像一個(gè)C++的類(lèi)?)這種玩法英文叫:Flexible Array,中文翻譯叫:柔性數(shù)組。

我們來(lái)用gdb看一下:

  1. (gdb) p thisline   
  2. $1 = (struct line *) 0x601010   
  3.     
  4. (gdb) p *thisline   
  5. $2 = {length = 10, contents = 0x601010 "\n"}   
  6.     
  7. (gdb) p thisline->contents   
  8. $3 = 0x601014 "aaaaaaaaaa" 

我們可以看到:在輸出*thisline時(shí),我們發(fā)現(xiàn)其中的成員變量contents的地址居然和thisline是一樣的(偏移量為0×0??!!)。但是當(dāng)我們輸出thisline->contents的時(shí)候,你又發(fā)現(xiàn)contents的地址是被offset了0×4了的,內(nèi)容也變成了10個(gè)‘a’。(我覺(jué)得這是一個(gè)GDB的bug,VC++的調(diào)試器就能很好的顯示)

我們繼續(xù),如果你sizeof(char[0])或是 sizeof(int[0]) 之類(lèi)的零長(zhǎng)度數(shù)組,你會(huì)發(fā)現(xiàn)sizeof返回了0,這就是說(shuō),零長(zhǎng)度的數(shù)組是存在于結(jié)構(gòu)體內(nèi)的,但是不占結(jié)構(gòu)體的size。你可以簡(jiǎn)單的理解為一個(gè)沒(méi)有內(nèi)容的占位標(biāo)識(shí),直到我們給結(jié)構(gòu)體分配了內(nèi)存,這個(gè)占位標(biāo)識(shí)才變成了一個(gè)有長(zhǎng)度的數(shù)組。

看到這里,你會(huì)說(shuō),為什么要這樣搞啊,把contents聲明成一個(gè)指針,然后為它再分配一下內(nèi)存不行么?就像下面一樣。

  1. struct line {   
  2.    int length;   
  3.    char *contents;   
  4. };   
  5.     
  6. int main(){   
  7.     int this_length=10;   
  8.     struct line *thisline = (struct line *)malloc (sizeof (struct line));   
  9.     thisline->contents = (char*) malloc( sizeof(char) * this_length );   
  10.     thisline->length = this_length;   
  11.     memset(thisline->contents, 'a', this_length);   
  12.     return 0;   

這不一樣清楚嗎?而且也沒(méi)什么怪異難懂的東西。是的,這也是普遍的編程方式,代碼是很清晰,也讓人很容易理解。即然這樣,那為什么要搞一個(gè)零長(zhǎng)度的數(shù)組?有毛意義?!

這個(gè)事情出來(lái)的原因是——我們想給一個(gè)結(jié)構(gòu)體內(nèi)的數(shù)據(jù)分配一個(gè)連續(xù)的內(nèi)存!這樣做的意義有兩個(gè)好處:

第一個(gè)意義是,方便內(nèi)存釋放。如果我們的代碼是在一個(gè)給別人用的函數(shù)中,你在里面做了二次內(nèi)存分配,并把整個(gè)結(jié)構(gòu)體返回給用戶(hù)。用戶(hù)調(diào)用free可以釋放結(jié)構(gòu)體,但是用戶(hù)并不知道這個(gè)結(jié)構(gòu)體內(nèi)的成員也需要free,所以你不能指望用戶(hù)來(lái)發(fā)現(xiàn)這個(gè)事。所以,如果我們把結(jié)構(gòu)體的內(nèi)存以及其成員要的內(nèi)存一次性分配好了,并返回給用戶(hù)一個(gè)結(jié)構(gòu)體指針,用戶(hù)做一次free就可以把所有的內(nèi)存也給釋放掉。(讀到這里,你一定會(huì)覺(jué)得C++的封閉中的析構(gòu)函數(shù)會(huì)讓這事容易和干凈很多)

第二個(gè)原因是,這樣有利于訪問(wèn)速度。連續(xù)的內(nèi)存有益于提高訪問(wèn)速度,也有益于減少內(nèi)存碎片。(其實(shí),我個(gè)人覺(jué)得也沒(méi)多高了,反正你跑不了要用做偏移量的加法來(lái)尋址)

我們來(lái)看看是怎么個(gè)連續(xù)的,用gdb的x命令來(lái)查看:(我們知道,用struct line {}中的那個(gè)char contents[]不占用結(jié)構(gòu)體的內(nèi)存,所以,struct line就只有一個(gè)int成員,4個(gè)字節(jié),而我們還要為contents[]分配10個(gè)字節(jié)長(zhǎng)度,所以,一共是14個(gè)字節(jié))

  1. (gdb) x /14b thisline   
  2. 0x601010:       10      0       0       0       97      97      97      97   
  3. 0x601018:       97      97      97      97      97      97 

從上面的內(nèi)存布局我們可以看到,前4個(gè)字節(jié)是 int length,后10個(gè)字節(jié)就是char contents[]。

如果用指針的話(huà),會(huì)變成這個(gè)樣子:

  1. (gdb) x /16b thisline   
  2. 0x601010:       1       0       0       0       0       0       0       0   
  3. 0x601018:       32      16      96      0       0       0       0       0   
  4. (gdb) x /10b this->contents   
  5. 0x601020:       97      97      97      97      97      97      97      97   
  6. 0x601028:       97      97 

上面一共輸出了四行內(nèi)存,其中,

  • 第一行前四個(gè)字節(jié)是 int length,第一行的后四個(gè)字節(jié)是對(duì)齊。
  • 第二行是char* contents,64位系統(tǒng)指針8個(gè)長(zhǎng)度,他的值是0×20 0×10 0×60 也就是0×601020。
  • 第三行和第四行是char* contents指向的內(nèi)容。

從這里,我們看到,其中的差別——數(shù)組的原地就是內(nèi)容,而指針的那里保存的是內(nèi)容的地址

后記

好了,我的文章到這里就結(jié)束了。但是,請(qǐng)?jiān)试S我再?lài)Z叨兩句。

1)看過(guò)這篇文章,你覺(jué)得C復(fù)雜嗎?我覺(jué)得并不簡(jiǎn)單。某些地方的復(fù)雜程度不亞于C++。

2)那些學(xué)不好C++的人一定是連C都學(xué)不好的人。連C都沒(méi)學(xué)好,你們根本沒(méi)有資格鄙視C++。

3)當(dāng)你們?cè)谡f(shuō)有坑的時(shí)候,你得問(wèn)一下自己,是真有坑還是自己的學(xué)習(xí)能力上出了問(wèn)題。

如果你覺(jué)得你的C語(yǔ)言還不錯(cuò),歡迎你看看《C語(yǔ)言的謎題》還有《誰(shuí)說(shuō)C語(yǔ)言很簡(jiǎn)單?》還有《語(yǔ)言的歧義》以及《深入理解C語(yǔ)言》一文。

原文鏈接:http://coolshell.cn/articles/11377.html

責(zé)任編輯:林師授 來(lái)源: 酷 殼
相關(guān)推薦

2022-09-30 15:03:09

C語(yǔ)言深拷貝淺拷貝

2010-12-30 09:22:58

C語(yǔ)言 數(shù)組

2021-05-11 11:31:52

C語(yǔ)言類(lèi)型指針

2016-12-05 13:35:02

C語(yǔ)言數(shù)組指針

2009-08-31 15:02:22

C#解析結(jié)構(gòu)體指針

2020-07-21 15:20:20

語(yǔ)言結(jié)構(gòu)體共用體

2009-08-14 11:05:28

C#語(yǔ)言的結(jié)構(gòu)體

2009-08-13 15:41:50

C#結(jié)構(gòu)體指針

2014-02-10 15:05:37

C語(yǔ)言封裝

2022-01-09 23:04:19

語(yǔ)言打印結(jié)構(gòu)體

2022-08-19 14:38:52

C語(yǔ)言結(jié)構(gòu)體struct

2009-08-13 13:03:52

C#結(jié)構(gòu)體數(shù)組

2009-08-13 13:17:10

C#結(jié)構(gòu)體數(shù)組

2011-07-15 01:20:58

C指針函數(shù)函數(shù)指針

2016-12-12 12:37:45

結(jié)構(gòu)C代碼賦值

2009-09-27 11:14:09

C#數(shù)組

2009-09-16 09:00:15

C#數(shù)組C#指針

2011-04-11 13:00:08

C++結(jié)構(gòu)體枚舉

2021-01-13 06:58:35

C語(yǔ)言函數(shù)指針

2009-07-31 15:10:21

C#函數(shù)指針數(shù)組C#數(shù)組
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产一区在线观看麻豆| 日韩精品水蜜桃| 天天色天天操综合| 日韩精品成人一区二区在线观看| 一级黄色片在线| 黄色工厂这里只有精品| 亚洲色图日韩av| 久久久久无码精品| 午夜伦理福利在线| 最新欧美精品一区二区三区| 国产精品香蕉视屏| 91精品国产乱码久久久久| 亚洲人妖在线| 久久久999精品视频| 一本色道综合久久欧美日韩精品| 国产成人福利夜色影视| 偷窥国产亚洲免费视频| 宅男av一区二区三区| 日本a一级在线免费播放| 国产精品自拍一区| 国产精品高清网站| 天堂网一区二区三区| 亚洲午夜精品一区 二区 三区| 亚洲精品一区二区三区不| 国产又粗又猛大又黄又爽| 韩国成人漫画| 五月婷婷另类国产| 麻豆视频传媒入口| av一本在线| 久久综合狠狠综合| 国产美女在线精品免费观看| av一区二区三| 久久激情五月婷婷| 国产aaa精品| 日韩网红少妇无码视频香港| 亚洲最大av| 最近的2019中文字幕免费一页| 黄色网址在线视频| 97久久综合区小说区图片区| 91精品国产乱| 中文字幕亚洲影院| 日韩成人精品一区二区三区| 欧洲国内综合视频| 国产精品无码一本二本三本色| 182在线视频观看| 一区二区不卡在线播放 | 天天爱天天操天天干| av丝袜在线| 亚洲亚洲精品在线观看| 国产精品啪啪啪视频| 黄色av免费在线| 亚洲素人一区二区| 天天做天天爱天天高潮| 免费黄色在线网站| 亚洲欧美激情视频在线观看一区二区三区| 亚洲欧美日韩精品综合在线观看 | 日韩在线观看免费全| 美女100%露胸无遮挡| 精品久久综合| 色老头一区二区三区| 自拍偷拍第9页| 伊人久久大香线| 色综合久综合久久综合久鬼88| 日韩一级片av| 亚洲第一伊人| 欧美专区日韩视频| 在线观看免费高清视频| 久久99精品久久只有精品| 成人黄色免费看| 亚洲乱色熟女一区二区三区| av亚洲产国偷v产偷v自拍| 麻豆av一区二区三区| 国产福利小视频在线观看| 国产精品你懂的在线欣赏| dy888午夜| 2021中文字幕在线| 精品高清美女精品国产区| 92看片淫黄大片一级| 8av国产精品爽爽ⅴa在线观看| 在线不卡一区二区| 国产 xxxx| 精品一区二区三| 久热99视频在线观看| 日韩三级小视频| 秋霞国产午夜精品免费视频| 亚洲自拍偷拍色片视频| 青青草娱乐在线| 亚洲视频资源在线| 免费黄色日本网站| 日韩亚洲国产免费| 亚洲精品电影在线观看| 亚洲色图100p| 在线一区视频| 国产一区红桃视频| 五十路在线视频| 中文字幕一区在线| 日本人体一区二区| 四虎精品在线观看| 精品呦交小u女在线| 欧洲美熟女乱又伦| 亚洲无线视频| 91精品久久久久久久久久久 | 国产亚洲欧美视频| 久久综合成人网| 麻豆一区二区三| 久久精品人人做人人爽电影| jizz性欧美| 在线精品视频小说1| 男女性杂交内射妇女bbwxz| 成人在线丰满少妇av| 午夜精品久久久久久久白皮肤| 久久久久久久亚洲| 成人h动漫精品一区二区| 一区二区三区在线观看www| 日韩精品极品| 精品999在线播放| 免费看特级毛片| 日韩精品一区第一页| 精品乱码一区二区三区| aaa大片在线观看| 欧美午夜精品久久久| 国产精品探花一区二区在线观看| 一区二区日韩欧美| 国产日产欧美a一级在线| 青春有你2免费观看完整版在线播放高清| 亚洲美女偷拍久久| 亚洲美女性囗交| 精品久久久久中文字幕小说| 青青a在线精品免费观看| 蜜桃视频在线观看www| 亚洲免费视频成人| 久久综合在线观看| 国产精品久久久久9999赢消| 国产精品在线看| 久久久久久久影视| 色狠狠一区二区三区香蕉| 国产精品300页| 国产亚洲精品久久久久婷婷瑜伽| 国产成人免费观看| 天堂成人av| 精品黑人一区二区三区久久 | 91短视频版在线观看www免费| 欧美午夜激情在线| 亚洲一区二区观看| 久久福利精品| 欧美亚洲免费高清在线观看| av资源亚洲| 亚洲天堂成人在线视频| 中文字幕xxxx| 国产精品三级电影| 欧美日韩中文不卡| 91国语精品自产拍| 99电影在线观看| 欧美亚洲天堂| 亚洲国产成人av在线| 精品欧美一区二区三区免费观看 | 欧美办公室脚交xxxx| 亚洲精品久久久久中文字幕二区 | 在线免费看视频| 青青青伊人色综合久久| 亚洲永久一区二区三区在线| 亚洲福利影视| 欧美国产日本在线| 天天操天天操天天操| 欧美午夜性色大片在线观看| 久久午夜福利电影| 韩国av一区二区三区四区| 欧美日韩午夜爽爽| 欧洲vs亚洲vs国产| 国产精品久久久久久久久粉嫩av| 欧美jizzhd欧美| 精品久久久久久久久久久久久久久| a v视频在线观看| 日本一区二区免费在线观看视频| 午夜精品中文字幕| 欧美视频福利| 欧美一二三四五区| 91精品福利观看| 97超碰色婷婷| 尤物网址在线观看| 亚洲国产成人精品久久| 五月天中文字幕| 亚洲综合在线第一页| 国产精品亚洲无码| 国产精品一区在线观看你懂的| 欧美视频在线免费播放| 精品欧美久久| 国产精品免费在线播放| 91精品店在线| 国内精久久久久久久久久人| aaa日本高清在线播放免费观看| 日韩视频在线永久播放| 五月天婷婷导航| 亚洲激情一二三区| 女人十八毛片嫩草av| 国产成人免费视| 亚洲一级免费在线观看| 亚洲免费播放| 自拍亚洲欧美老师丝袜| 台湾亚洲精品一区二区tv| 成人a在线视频| 免费观看欧美大片| 久久久久久有精品国产| 亚洲s色大片| 日韩乱码在线视频| 亚洲精品视频网| 5月丁香婷婷综合| 青青草视频在线观看免费| 亚洲福利一区二区| 三级全黄做爰视频| 亚洲国产成人在线| 亚洲av无码成人精品国产| 国产白丝精品91爽爽久久| 在线观看高清免费视频| 久久婷婷av| 男女视频网站在线观看| 欧美国产高潮xxxx1819| 中文字幕久久一区| 久久高清免费| 日韩欧美亚洲v片| 免费一区二区三区视频导航| 国产欧美一区二区视频| 国产一区二区三区精品在线观看| 国产精品青青在线观看爽香蕉 | 91在线品视觉盛宴免费| 日韩电影免费在线观看中文字幕| 精品人妻一区二区三区日产乱码| 欧美日高清视频| 一区二区视频播放| 欧美调教femdomvk| 天天射天天干天天| 91久久国产最好的精华液| 久久久久久91亚洲精品中文字幕| 亚洲国产欧美日韩另类综合| 久久久久久福利| 亚洲精品国产无套在线观| 免费国产羞羞网站美图| 亚洲三级视频在线观看| 午夜爱爱毛片xxxx视频免费看| 国产精品女主播av| 波多野结衣欲乱| 亚洲人成在线播放网站岛国 | 一区二区三区在线观看免费| 一级一片免费播放| 91精品国产91久久综合| 日本高清xxxx| 好看不卡的中文字幕| 91免费国产精品| 136国产福利精品导航网址| 久久99中文字幕| 国产亚洲精品久久久久婷婷瑜伽| 激情综合在线观看| 亚洲欧美视频| 日韩手机在线观看视频| 美国av一区二区| 日日干日日操日日射| 国产精品2024| 久久福利小视频| 久久精品视频在线看| 一级特黄曰皮片视频| 中文字幕一区二区不卡 | 日韩欧美亚洲成人| 波多野结衣一本一道| 欧美久久久久久久久| www.天堂在线| 日韩高清中文字幕| 成年在线观看免费人视频| xxxxx91麻豆| 四虎亚洲精品| 欧美一级电影免费在线观看| 国产精品第一国产精品| 亚洲一区二区自拍| 欧美日韩另类图片| 亚洲国产日韩综合一区| 亚洲精品在线观看91| 免费国产a级片| 日本欧美一区二区| 国产ts在线观看| 久久久久久9999| 中文字幕电影av| 日韩欧美精品在线观看| 91麻豆国产视频| 亚洲国产日韩欧美在线图片| 国产美女视频一区二区三区| 久久伊人精品一区二区三区| 国产精品vvv| 国产欧美日韩视频| 麻豆国产欧美一区二区三区r| 台湾成人av| 91久久夜色精品国产九色| 污污的网站18| www.爱久久.com| 亚洲精品久久久久久国| 欧美日韩激情美女| 国产成人精品一区二区无码呦| 日韩精品电影网| 亚洲国产精品精华素| 国产福利视频一区二区| 97久久综合区小说区图片区| 亚洲一区二区三区精品视频| 日韩图片一区| 宇都宫紫苑在线播放| 国产欧美精品一区二区色综合| 久久亚洲AV无码| 欧美日韩亚洲综合一区| 99在线热播| 国产一区二区三区影视| 成人资源视频网站免费| 成人免费a**址| av观看免费在线| 成人激情免费网站| 午夜爽爽爽男女免费观看| 色狠狠色狠狠综合| 亚洲欧美日韩动漫| 九九热在线精品视频| 日韩精品第二页| 色一情一乱一伦一区二区三欧美 | 国内精品久久久久久影视8| 2019中文亚洲字幕| 亚洲天堂电影网| 久久福利精品| free性中国hd国语露脸| 亚洲国产成人av网| 亚洲av无码乱码国产精品| 久久黄色av网站| 欧洲亚洲精品久久久久| 日韩精品欧美一区二区三区| 欧美一级久久| 少妇户外露出[11p]| 午夜久久久久久电影| 国精产品一品二品国精品69xx| 欧美精品做受xxx性少妇| 91丨精品丨国产| 亚洲最大色综合成人av| 日本少妇一区二区| 精品一区二区三孕妇视频| 在线亚洲一区二区| 国产三级电影在线| 国产精品人成电影| 欧美一区二区三区高清视频| 情侣黄网站免费看| 国产偷v国产偷v亚洲高清| 久久久蜜桃一区二区| 亚洲午夜激情免费视频| 成人精品高清在线视频| 影音先锋欧美在线| 久久精品国产亚洲高清剧情介绍 | 国产精品久久九九| 影音先锋亚洲一区| 国产精品一级黄片| 日本韩国一区二区三区视频| 成年人免费在线视频| 国产欧美精品在线| 一区二区三区网站| 毛茸茸free性熟hd| 欧美日韩亚洲激情| 国产成人天天5g影院在线观看| 国产精品揄拍500视频| 91精品国产成人观看| 欧美双性人妖o0| 欧美性色19p| 天堂中文а√在线| 444亚洲人体| 在线亚洲国产精品网站| 亚洲国产日韩一区无码精品久久久| 欧美三级中文字幕| 手机在线免费av| 蜜桃精品久久久久久久免费影院| 久久一区精品| 爱爱视频免费在线观看| 亚洲激情在线观看视频免费| 性欧美1819sex性高清| 一区国产精品| 成人av在线一区二区| 伊人久久久久久久久久久久 | 亚洲国产欧美一区二区丝袜黑人| 欧美二三四区| 亚洲激情免费视频| 91在线观看地址| 国产又粗又猛又色又| 久久久久久久影院| 日本久久黄色| 美女搡bbb又爽又猛又黄www| 91福利资源站| 日韩伦理电影网站| 欧美日韩系列| 岛国一区二区三区| 中文字幕激情视频| 孩xxxx性bbbb欧美| 久久中文字幕av| 国产xxxx视频| 欧美日韩国产免费| 韩日毛片在线观看| 黑人巨大国产9丨视频| 久久综合九色综合97婷婷 | 亚洲欧美国产va在线影院| 成年永久一区二区三区免费视频| 成熟了的熟妇毛茸茸| 亚洲人成网站影音先锋播放| 黄色毛片在线观看|