青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

HyJune的專欄

Linux From Scratch

  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
  10 隨筆 :: 11 文章 :: 6 評論 :: 0 Trackbacks
from: http://blog.csdn.net/wuliming_sc/archive/2006/11/04/1365923.aspx

1. 什么是標(biāo)準(zhǔn)預(yù)定義宏?
2. 連接運算符“##”和字符串化運算符"#"有什么作用?
3. 怎樣刪去字符串尾部的空格?
4. 怎樣刪去字符串頭部的空格?
5. 怎樣打印字符串的一部分?
6. 用malloc()函數(shù)更好還是用calloc()函數(shù)更好?
7. NULL和NUL有什么不同?
8. 在程序退出main()函數(shù)之后,還有可能執(zhí)行一部分代碼嗎?
9. 數(shù)組作為函數(shù)的常數(shù)時,可以通過sizeof運算符得到函數(shù)數(shù)組的大小嗎?
10. array_name和&array_name有什么不同?
11. 怎樣判斷一個字符是數(shù)字、字母或其它類別的符號?

什么是標(biāo)準(zhǔn)預(yù)定義宏?

ANSIC標(biāo)準(zhǔn)定義了以下6種可供C語言使用的預(yù)定義宏:
----------------------------------------------------------------------------
   宏  名                     作    用
----------------------------------------------------------------------------
  __LINE__           在源代碼中插入當(dāng)前源代碼行號
  __FILE__           在源代碼中插入當(dāng)前源代碼文件名
  __DATE__           在源代碼中插入當(dāng)前編譯日期〔注意和當(dāng)前系統(tǒng)日期區(qū)別開來〕
  __TIME__           在源代碼中插入當(dāng)前編譯時間〔注意和當(dāng)前系統(tǒng)時間區(qū)別開來〕 
  __STDC__           當(dāng)要求程序嚴(yán)格遵循ANSIC標(biāo)準(zhǔn)時該標(biāo)識符被賦值為1。
----------------------------------------------------------------------------

標(biāo)識符__LINE__和__FILE__通常用來調(diào)試程序;標(biāo)識符__DATE__和__TIME__通常用來在編譯后的程序中加入一個時間標(biāo)志,以區(qū)分程序的不同版本;當(dāng)要求程序嚴(yán)格遵循ANSIC標(biāo)準(zhǔn)時,標(biāo)識符__STDC__就會被賦值為1;當(dāng)用C++編譯程序編譯時,標(biāo)識符__cplusplus就會被定義。
 1 #include <stdio.h>
 2 
 3 int main ()
 4 {
 5     printf("該輸出行在源程序中的位置:%d\n", __LINE__ );
 6     printf("該程序的文件名為:%s\n", __FILE__ );
 7     printf("當(dāng)前日期為:%s\n", __DATE__ );
 8     printf("當(dāng)前時間為:%s\n", __TIME__ );
 9 
10     return 0;
11 }

連接運算符“##”和字符串化運算符"#"有什么作用?

連接運算符“##”可以把兩個獨立的字符串連接成一個字符串。在C的宏中,經(jīng)常用到“##”運算符,請看下例:
 1 #include <stdio.h>
 2 
 3 int main ()
 4 {
 5     printf("該輸出行在源程序中的位置:%d\n", __LINE__ );
 6     printf("該程序的文件名為:%s\n", __FILE__ );
 7     printf("當(dāng)前日期為:%s\n", __DATE__ );
 8     printf("當(dāng)前時間為:%s\n", __TIME__ );
 9 
10     return 0;
11 }

在該例中,宏SORT利用“##”運算符把字符串sort_function和經(jīng)參數(shù)x傳遞過來的字符串連接起來,這意味著語句 SORT(3)(array,elemnts,element_size) 將被預(yù)處理程序轉(zhuǎn)換為語句:
    sort_function3(array,elements,element_size);

從宏SORT的用法中你可以看出,如果在運行時才能確定要調(diào)用哪個函數(shù),你可以利用“##”運算符動態(tài)地構(gòu)造要調(diào)用的函數(shù)的名稱。
 1 
 2 #include<stdio.h>
 3 
 4 #define FUNC(X)  func ## X
 5 
 6 int func1(int a, int b)
 7 {
 8     return 1;
 9 }
10 
11 int func2(int a, int b)
12 {
13     return 2;
14 
15 
16 int main()
17 {
18     int  a, b, result;
19     result = FUNC(1)(a, b);
20     printf("---%d---\n", result);
21 
22     result = FUNC(2)(a, b);
23     printf("---%d---\n", result);
24 
25     getchar();
26 
27     return 0;
28 }
字符串化運算符"#"運算符能將宏的參數(shù)轉(zhuǎn)換為帶雙引號的字符串,請看下例:

    define DEBUG_VALUE(v)  printf(#v"is equal to %d. \n", v)

    你可以在程序中用 DEBUG_VALUE 宏檢查變量的值,請看下例:

    int x=20;

    DEBUG_VALUE(x);

上述語句將在屏幕上打印"x is equal to 20"。這個例子說明,宏所使用的“#”運算符是一種非常方便的調(diào)試工具。
 1 #include <stdio.h>
 2 
 3 #define DEBUG_VALUE_INT(v)  printf(#v" is equal to %d.\n",v )
 4 
 5 #define DEBUG_VALUE_STR(v)  printf(#v" is equal to %s.\n",v )
 6 
 7 int main(int)
 8 {
 9       int x = 0;
10       char str[] = "asdfqweqwfdvasdf";
11 
12       DEBUG_VALUE_INT(x);
13 
14       DEBUG_VALUE_STR(str);
15 
16       getchar();
17 
18       return 0;
19 }
20 

怎樣刪去字符串尾部的空格?

C語言沒有提供可刪去字符串尾部空格的標(biāo)準(zhǔn)庫函數(shù),但是,編寫這樣的一個函數(shù)是很方便的。請看下例:
 1 #include <stdio.h>
 2 # include <string.h>
 3 
 4 char * rtrim( char * );
 5 
 6 int main()
 7 {
 8 
 9 //char * trail_str = "0123456789          "; 把字符串定義成這種形式時,運行程序的時候會出現(xiàn)異常
10 
11 char trail_str[21= "0123456789          ";
12 
13     printf( "Before calling rtrim(), trail_str is '%s'\n" , trail_str );
14     printf( "and has a length of %d. \n" , strlen( trail_str ) );
15 
16     rtrim(trail_str);
17 
18     printf( "After calling rttim(), trail_ str is '%s'\n", trail_str );
19     printf( "and has a length of %d. \n" , strlen( trail_str ) ) ;
20 
21     getchar();
22 
23     return 0;
24 }

 1 /* The rtrim() function removes trailing spaces from a string. */
 2 
 3 char * rtrim( char * str )
 4 {
 5     int n = strlen(str) - 1;
 6 
 7     while( n > 0 )
 8     {
 9         if*( str + n ) != ' ' )
10         {
11             //在windows下,將str字符串的某一位設(shè)置為值 '\0' 時,會出現(xiàn)異常..
12             *( str + n + 1 ) = '\0';
13             break ;
14         } else {
15             printf("%c, %d\n", str[n], str[n] );
16             n--;
17         }
18     }
19 
20     return str; 
21 }
在上例中,rtrim()是用戶編寫的一個函數(shù),它可以刪去字符串尾部的空格。函數(shù)rtrim()從字符串中位于null字符前的那個字符開始往回檢查每個字符,當(dāng)遇到第一個不是空格的字符時,就將該字符后面的字符替換為null字符。因為在C語言中null字符是字符串的結(jié)束標(biāo)志,所以函數(shù)rtrim()的作用實際上就是刪去字符串尾部的所有空格。

怎樣刪去字符串頭部的空格?

C語言沒有提供可刪去字符串頭部空格的標(biāo)準(zhǔn)庫函數(shù),但是,編寫這樣的一個函數(shù)是很方便的。請看下例:

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 char *ltrim(char * );
 5 char *rtrim(char * );
 6 
 7 void main (void)
 8 {
 9 
10 }
11 
12 char * ltrim(char * str)
13 {
14 
15     strrev(str);    /* Call strrev to reverse the string. */
16     rtrim(str);     /* Call rtrim to remvoe the "trailing" spaces. */
17 
18     strrev(str);    /* Restore the string's original order. */
19 
20     return str ;    /* Return a pointer to the string. */
21 }
22 
23 char* rtrim(char* str)
24 {
25 
26 }
在上例中,刪去字符串頭部空格的工作是由用戶編寫的ltrim()函數(shù)完成的,該函數(shù)調(diào)用了6.2的例子中的rtrim()函數(shù)和標(biāo)準(zhǔn)C庫函數(shù)strrev()。ltrim()函數(shù)首先調(diào)用strrev()函數(shù)將字符串顛倒一次,然后調(diào)用rtrim()函數(shù)刪去字符串尾部的空格,最后調(diào)用strrev()函數(shù)將字符串再顛倒一次,其結(jié)果實際上就是刪去原字符串頭部的空格。

怎樣打印字符串的一部分?

使用printf()函數(shù)打印字符串的任意部分,請看下例:
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 
 5 int main()
 6 
 7 {
 8 
 9     char * source_str = "THIS IS THE SOURCE STRING" ;
10 
11     /* Use printfO to print the first 11 characters of source_str. */
12     printf("First 11 characters: ' %11.11s'\n" , source_str);
13 
14     /* Use printf() to print only the last 13 characters of source _str. */
15     printf("Last 13 characters:'%13.13s'\n", source_str+(strlen(source_str)-13));
16 }
17 

    輸出結(jié)果為:  
    First 11 characters: 'THIS IS THE'  
    Last 13 characters:'SOURCE STRING'

在上例中,第一次調(diào)用printf()函數(shù)時,通過指定參數(shù)"%11.11s",迫使printf()函數(shù)只打印11個字符的長度,因為源字符串的長度大于11個字符,所以在打印時源字符串將被截掉一部分,只有頭11個字符被打印出來。第二次調(diào)用printf()函數(shù)時,它將源字符串的最后13個字符打印出來,其實現(xiàn)過程為:
(1)用strlen()函數(shù)計算出source_str字符串的長度,即strlen(source_str)。
(2)將source_str的長度減去13(13是將要打印的字符數(shù)),得出source_str中剩余字符數(shù),且pstrlen(source_str)-13。
(3)將strlen(source_str)-13和source_str的地址相加,得出指向source_str中倒數(shù)第13個字符的地址的指針;即source_str+(strlen(source_str)-13)。這個指針就是printf()函數(shù)的第二個參數(shù)。
(4)通過指定參數(shù)“%13.13s”,迫使printf()函數(shù)只打印13個字符的長度,其結(jié)果實際上就是打印源字符串的最后13個字符。

用malloc()函數(shù)更好還是用calloc()函數(shù)更好?

函數(shù)malloc()和calloc()都可以用來分配動態(tài)內(nèi)存空間,但兩者稍有區(qū)別。malloc()函數(shù)有一個參數(shù),即要分配的內(nèi)存空間的大?。?nbsp; 
    void *malloc(size_t size);  
calloc()函數(shù)有兩個參數(shù),分別為元素的數(shù)目和每個元素的大小,兩個參數(shù)的乘積就是要分配的空間的大?。?nbsp; 
    void *calloc(size_t numElements,size_t sizeOfElement);
如果調(diào)用成功,函數(shù)malloc()和calloc()都將返回所分配的內(nèi)存空間的首地址。
malloc()函數(shù)和calloc()函數(shù)的主要區(qū)別是前者不能初始化所分配的內(nèi)存空間,而后者能。如果由malloc()函數(shù)分配的內(nèi)存空間原來沒有被使用過,則其中的每一位可能都是0;反之,如果這部分內(nèi)存空間曾經(jīng)被分配、釋放和重新分配,則其中可能遺留各種各樣的數(shù)據(jù)。也就是說,使用malloc()函數(shù)的程序開始時(內(nèi)存空間還沒有被重新分配)能正常運行,但經(jīng)過一段時間后(內(nèi)存空間已被重新分配)可能會出現(xiàn)問題。

calloc()函數(shù)會將所分配的內(nèi)存空間中的每一位都初始化為零,也就是說,如果你是為字符類型或整數(shù)類型的元素分配內(nèi)存,那么這些元素將保證會被初始化為零;如果你是為指針類型的元素分配內(nèi)存,那么這些元素通常(但無法保證)會被初始化為空指針;如果你是為實數(shù)類型的元素分配內(nèi)存,那么這些元素可能(只在某些計算機中)會被初始化為浮點型的零。

malloc()函數(shù)和calloc()函數(shù)的另一點區(qū)別是calloc()函數(shù)會返回一個由某種對象組成的數(shù)組,但malloc()函數(shù)只返回一個對象。為了明確是為一個數(shù)組分配內(nèi)存空間,有些程序員會選用calloc()函數(shù)。但是,除了是否初始化所分配的內(nèi)存空間這一點之外,絕大多數(shù)程序員認(rèn)為以下兩種函數(shù)調(diào)用方式?jīng)]有區(qū)別:
    calloc( numElements,sizeOfElement );
    malloc( numElements * sizeOfElement );

需要解釋的一點是,理論上(按照ANSIC標(biāo)準(zhǔn))指針的算術(shù)運算只能在一個指定的數(shù)組中進行,但是在實踐中,即使C編譯程序或翻譯器遵循這種規(guī)定,許多C程序還是沖破了這種限制。因此,盡管malloc()函數(shù)并不能返回一個數(shù)組,它所分配的內(nèi)存空間仍然能供一個數(shù)組使用(對realloc()函數(shù)來說同樣如此,盡管它也不能返回一個數(shù)組)。總之,當(dāng)你在calloc()函數(shù)和malloc()函數(shù)之間作選擇時,你只需考慮是否要初始化所分配的內(nèi)存空間,而不用考慮函數(shù)是否能返回一個數(shù)組。

NULL和NUL有什么不同?

NULL是在<stddef.h>頭文件中專門為空指針定義的一個宏。NUL是ASCII字符集中第一個字符的名稱,它對應(yīng)于一個零值。C語言中沒有NUL這樣的預(yù)定義宏。注意:在ASCII字符集中,數(shù)字0對應(yīng)于十進制值80,不要把數(shù)字0和'\0'(NUL)的值混同起來。

NULL可以被定義為(void *)0,而NUL可以被定義為'\0'。NULL和NUL都可以被簡單地定義為0,這時它們是等價的,可以互換使用,但這是一種不可取的方式。為了使程序讀起來更清晰,維護起來更容易,你在程序中應(yīng)該明確地將NULL定義為指針類型,而將NUL定義為字符類型。
 
在程序退出main()函數(shù)之后,還有可能執(zhí)行一部分代碼嗎?

可以,但這要借助C庫函數(shù)atexit()。利用atexit()函數(shù)可以在程序終止前完成一些“清理”工作——如果將指向一組函數(shù)的指針傳遞給atexit()函數(shù),那么在程序退出main()函數(shù)后(此時程序還未終止)就能自動調(diào)用這組函數(shù)。在使用atexit()函數(shù)時你要注意這樣兩點:

第一: 由atexit()函數(shù)指定的要在程序終止前執(zhí)行的函數(shù)要用關(guān)鍵字void說明,并且不能帶參數(shù);

第二: 由atexit()函數(shù)指定的函數(shù)在入棧時的順序和調(diào)用atexit()函數(shù)的順序相反,即它們在執(zhí)行時遵循后進先出(LIFO)的原則。

 1 #include<stdlib.h>
 2 #include<stdio.h>
 3 
 4 void my_exit1(void)
 5 {
 6     printf("my_exit1() function !\n");
 7 }              
 8 
 9 void my_exit2(void)
10 {
11     printf("my_exit2() function !\n");
12 }
13 
14 
15 int  main()
16 {
18     atexit ( my_exit1 );
19     atexit ( my_exit2 );
20     printf("now, eixt this program\n");
21     exit(0);
22 }
輸出結(jié)果為:
now, eixt this program...
my_exit2() function !
my_exit1() function !

數(shù)組作為函數(shù)的常數(shù)時,可以通過sizeof運算符得到函數(shù)數(shù)組的大小嗎?

不可以。當(dāng)把數(shù)組作為函數(shù)的參數(shù)時,你無法在程序運行時通過數(shù)組參數(shù)本身告訴函數(shù)該數(shù)組的大小,因為函數(shù)的數(shù)組參數(shù)相當(dāng)于指向該數(shù)組第一個元素的指針。這意味著把數(shù)組傳遞給函數(shù)的效率非常高,也意味著程序員必須通過某種機制告訴函數(shù)數(shù)組參數(shù)的大小。為了告訴函數(shù)數(shù)組參數(shù)的大小,人們通常采用以下兩種方法:

第一種方法是將數(shù)組和表示數(shù)組大小的值一起傳遞給函數(shù),例如memcpy()函數(shù)就是這樣做的:
    memcpy( dest,source,length );

第二種方法是引入某種規(guī)則來結(jié)束一個數(shù)組,例如在C語言中字符串總是以ASCII字符NUL('\0')結(jié)束,而一個指針數(shù)組總是以空指針結(jié)束。請看下述函數(shù),它的參數(shù)是一個以空指針結(jié)束的字符指針數(shù)組,這個空指針告訴該函數(shù)什么時候停止工作:
1 void printMany( char *strings[] )  
2     {
3         int i = 0
4         while( strings[i] != NULL )
5         {
6             puts(strings[i]);
7             ++i;
8         }
9     }
正象9.5中所說的那樣,C程序員經(jīng)常用指針來代替數(shù)組下標(biāo),因此大多數(shù)C程序員通常會將上述函數(shù)編寫得更隱蔽一些:
1 void printMany( char *strings[] )
2     {
3         while*strings )
4         {
5             puts(*strings++);
6         }
7     }
盡管你不能改變一個數(shù)組名的值,但是strings是一個數(shù)組參數(shù),相當(dāng)于一個指針,因此可以對它進行自增運算,并且可以在調(diào)用puts()函數(shù)時對strings進行自增運算 [注意辨別這種情況:對“int array[10] 數(shù)組的array不能進行自加運算”]。

array_name和&array_name有什么不同?

前者是指向數(shù)組中第一個元素的指針,后者是指向整個數(shù)組的指針。注意: 筆者建議讀者讀到這里時暫時放下本書,寫一下指向一個含MAX個元素的字符數(shù)組的指針變量的說明。希望你不要敷衍了事,因為只有這樣你才能真正了解C語言表示復(fù)雜指針的句法的奧秘。下文將介紹如何獲得指向整個數(shù)組的指針。

數(shù)組是一種類型,它有三個要素,即基本類型(數(shù)組元素的類型),大小(當(dāng)數(shù)組被說明為不完整類型時除外),數(shù)組的值(整個數(shù)組的值)。你可以用一個指針指向整個數(shù)組的值:
    char a[MAX];    /*array of MAX characters*/
    char *p = a;   
    char *pa = &a;
在運行了上述這段代碼后,你就會發(fā)現(xiàn)p和pa的打印結(jié)果是一個相同的值,即p和pa指向同一個地址。但是,p和pa指向的對象是不同的。

上述定義和以下定義是相同的,它們的含義都是“ap是一個含MAX個字符指針的數(shù)組”: char *ap[MAX].

以下這種定義并不能獲得一個指向整個數(shù)組的值的指針:char *(ap[MAX]).

 
怎樣判斷一個字符是數(shù)字、字母或其它類別的符號?

在頭文件ctype.h中定義了一批函數(shù),它們可用來判斷一個字符屬于哪一類別。下面列出了這些函數(shù):
---------------------------------------------------------------------------------------
   函數(shù)         字符類別               返回非零值的字符
---------------------------------------------------------------------------------------
  isdigit()     十進制數(shù)               0--9
  isxdigit()    十六進制數(shù)             0--9,a—f,或A--F
  isalnum()     字母數(shù)字符號           0--9,a--Z,或A--Z
  isalpha()     字母                   a—z或A--Z
  islower()     小寫字母               a—z
  isupper()     大寫字母               A--Z
  isspace()     空白符                 空格符,水平制表符,垂直制表符,換行符,換頁符,或回車符
  isgraph()     非空白字符             任何打印出來不是空白的字符(ASCII碼從21到7E)
  isprint()     可打印字符             所有非空白字符,加上空格符
  ispunct()     標(biāo)點符                 除字母數(shù)字符號以外的所有非空白字符
  iscntrl()     控制字符               除可打印字符外的所有字符(ASCII碼從00到1F,加上7F)
----------------------------------------------------------------------------------------

與前文提到過的使用標(biāo)準(zhǔn)庫函數(shù)的好處相似,調(diào)用上述這些宏而不是自己編寫測試字符類別的程序也有三點好處。首先,這些宏運算速度快,因為它們的實現(xiàn)方式通常都是利用位屏蔽技術(shù)來檢查一個表,所以即使是進行一項相當(dāng)復(fù)雜的檢查,也比真正去比較字符的值要快得多。其次,這些宏都是正確的。如果你自己編寫一個測試程序,你很容易犯邏輯上或輸入上的錯誤,例如引入了一個錯誤的字符(或漏掉了一個正確的字符)。第三,這些宏是可移植的。信不信由你,并非所有的人都使用同樣的含PC擴充字符的ASCII字符集。也許今天你還不太在意,但是,當(dāng)你發(fā)現(xiàn)你的下一臺計算機使用的是Unicode字符集而不是ASCII字符集,你就會慶幸自己原來沒有按照字符集中的字符值來編寫程序。


其他字符轉(zhuǎn)換函數(shù):

isascii(測試字符是否為ASCII 碼字符)

int isascii(int c);

檢查參數(shù)c是否為ASCII碼字符,也就是判斷c的范圍是否在0到127之間。若參數(shù)c為ASCII碼字符,則返回TRUE,否則返回NULL(0)。

toascii(將整型數(shù)轉(zhuǎn)換成合法的ASCII 碼字符)

int toascii(int c);

toascii()會將參數(shù)c轉(zhuǎn)換成7位的unsigned char值,第八位則會被清除,此字符即會被轉(zhuǎn)成ASCII碼字符。將轉(zhuǎn)換成功的ASCII碼字符值返回。

tolower(將大寫字母轉(zhuǎn)換成小寫字母)

int tolower(int c);

若參數(shù)c為大寫字母則將該對應(yīng)的小寫字母返回。返回轉(zhuǎn)換后的小寫字母,若不須轉(zhuǎn)換則將參數(shù)c值返回。

toupper(將小寫字母轉(zhuǎn)換成大寫字母)

int toupper(int c);

若參數(shù)c為小寫字母則將該對映的大寫字母返回。返回轉(zhuǎn)換后的大寫字母,若不須轉(zhuǎn)換則將參數(shù)c值返回。
 
以isalmun為例,說明這些函數(shù)的用法[剩余的其他函數(shù)跟它類似]:
int isalnum ( int c )

檢查參數(shù)c是否為英文字母或阿拉伯?dāng)?shù)字,若參數(shù)c為字母或數(shù)字,則返回TRUE,否則返回NULL。此為宏定義,非真正函數(shù)。
 1 #include<stdio.h>
 2 #include <ctype.h>
 3 
 4 int main()
 5 {
 6     char str[]="123c@#FDsP[e?";
 7     int i;
 8     for( i = 0; str[i] != 0; i++ )
 9     {
10 
11         if( isalnum( str[i] ) )
12             printf("%c is an alphanumeric character\n", str[i] );
13     }
14 
15 }

posted on 2008-05-22 15:34 martin0501 閱讀(561) 評論(0)  編輯 收藏 引用 所屬分類: 1. C/C++系列
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美中文字幕在线视频| 亚洲国产精品一区制服丝袜| 欧美激情在线狂野欧美精品| 国产色产综合产在线视频| 国产精品99久久久久久久vr| 一区二区三区自拍| 久久亚洲高清| 欧美高清成人| 日韩一区二区精品| 欧美日韩国产在线看| 亚洲久久一区二区| 亚洲自拍另类| 国产美女精品免费电影| 久久久国产91| 欧美激情亚洲一区| 亚洲色图在线视频| 国产精品久久久久久久免费软件| 亚洲午夜黄色| 久久精品国产欧美亚洲人人爽| 国产精品久久久亚洲一区| 午夜精品一区二区在线观看| 老司机精品导航| 亚洲精品免费观看| 国产精品国产a级| 欧美一区免费| 亚洲国产你懂的| 日韩天堂av| 国产精品任我爽爆在线播放| 久久av一区| 亚洲大片精品永久免费| 宅男66日本亚洲欧美视频| 国产欧美日韩麻豆91| 久久中文久久字幕| 亚洲精品在线视频| 欧美一区二区三区在线播放| 亚洲高清不卡在线| 欧美日本不卡视频| 欧美一区二区视频97| 欧美激情第五页| 亚洲人成在线免费观看| 欧美日在线观看| 久久香蕉国产线看观看网| 亚洲精品一区二区三区不| 久久av在线| 一本到高清视频免费精品| 国产精品一区免费在线观看| 裸体歌舞表演一区二区| 亚洲一二三四区| 亚洲大胆视频| 久久精品噜噜噜成人av农村| 日韩亚洲欧美成人| 国产又爽又黄的激情精品视频 | 久久成年人视频| 亚洲精品社区| 亚洲国产精品一区二区第一页| 久久久久久伊人| 欧美在线观看视频一区二区三区 | 国产在线精品自拍| 国产精品视频你懂的| 欧美午夜无遮挡| 欧美区二区三区| 欧美人牲a欧美精品| 欧美劲爆第一页| 欧美高清在线视频观看不卡| 麻豆成人在线观看| 男人的天堂亚洲在线| 蜜臀av性久久久久蜜臀aⅴ四虎| 久久免费视频在线观看| 久久久久免费视频| 久久久久欧美| 免费观看亚洲视频大全| 免费观看久久久4p| 欧美福利一区| 欧美精品一区二区三区一线天视频| 免费一级欧美片在线观看| 狂野欧美激情性xxxx| 欧美高清不卡| 欧美极品一区| 欧美日韩一区二区在线观看| 欧美日韩在线一区二区三区| 国产精品高潮呻吟| 国产日韩欧美视频在线| 一区二区三区在线高清| 亚洲国产精品视频| 一区二区三区欧美在线| 亚洲综合欧美日韩| 久久国产精品一区二区三区| 老司机精品导航| 亚洲国产裸拍裸体视频在线观看乱了中文 | 午夜精品影院| 午夜日韩av| 久久综合久色欧美综合狠狠| 欧美福利在线观看| 99re热这里只有精品免费视频| 一区二区激情| 久久成人在线| 欧美丰满高潮xxxx喷水动漫| 欧美日韩一区二区三区在线观看免 | 尤物视频一区二区| 亚洲理伦电影| 欧美在线视频免费播放| 免费日韩成人| 夜夜嗨av一区二区三区中文字幕 | 国产精品av免费在线观看| 国产精品综合不卡av| 在线日韩欧美视频| 亚洲一区二区三区视频| 久久综合999| 夜夜嗨av一区二区三区四季av| 欧美一级久久久| 欧美a级大片| 国产伦理一区| 亚洲精品一区二区在线| 午夜一区在线| 亚洲激情在线| 欧美一区二区私人影院日本| 欧美高清视频在线 | 亚洲伊人网站| 久久久蜜桃一区二区人| 亚洲美女视频在线观看| 久久婷婷av| 国产精品视频精品| 日韩亚洲在线| 欧美第一黄色网| 性久久久久久久久| 国产精品成人一区二区艾草| 亚洲国产欧美在线| 欧美中文在线观看| 99视频国产精品免费观看| 免费成人av在线看| 狠狠噜噜久久| 欧美亚洲综合另类| 夜夜夜久久久| 欧美精选一区| 亚洲日本成人| 蜜乳av另类精品一区二区| 亚洲欧美日本国产有色| 欧美日韩三级视频| 亚洲国产美女久久久久| 久久精品国产一区二区三区免费看 | 另类天堂av| 亚洲免费在线视频| 国产精品久久久久久久久久久久久久 | 欧美国产日韩免费| 亚洲国产成人久久综合一区| 久久精品视频亚洲| 亚洲欧美日韩区| 国产精品日韩专区| 亚洲淫性视频| 99热这里只有精品8| 欧美另类videos死尸| 亚洲精品一区在线观看香蕉| 欧美成人按摩| 看欧美日韩国产| 亚洲电影第三页| 欧美成人一区二区三区| 久热爱精品视频线路一| 亚洲国产成人不卡| 亚洲二区视频在线| 欧美黄色一级视频| 日韩视频在线免费| 亚洲精品国产系列| 欧美日韩高清一区| 中文在线资源观看网站视频免费不卡| 亚洲激情视频在线观看| 欧美日韩国产高清| 亚洲一区高清| 亚洲自拍16p| 国产综合精品一区| 欧美风情在线| 欧美日韩成人免费| 午夜精品影院| 欧美在线免费观看视频| 黄色亚洲精品| 亚洲国产精品免费| 欧美色视频日本高清在线观看| 夜夜爽www精品| 亚洲一级片在线观看| 国产亚洲欧美日韩日本| 免费亚洲电影在线观看| 欧美激情1区| 亚洲女性喷水在线观看一区| 亚洲欧美日韩精品| 欲香欲色天天天综合和网| 亚洲高清不卡一区| 国产精品福利av| 久久精品免费电影| 欧美本精品男人aⅴ天堂| 一区二区三区四区五区精品视频| 亚洲天堂av综合网| 国产在线视频不卡二| 欧美高清视频一区| 国产精品福利在线观看| 久久嫩草精品久久久精品| 欧美电影免费观看高清| 午夜亚洲伦理| 葵司免费一区二区三区四区五区| 一区二区日韩免费看| 欧美一区二区三区免费在线看| 亚洲欧洲日产国产综合网|