日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

C和指针学习

發布時間:2023/11/27 生活经验 67 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C和指针学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

C和指針學習

最后更新時間:2012.12.3

原則:盡量短小精悍,實用,需要擴充閱讀都是以鏈接形式出現

注意:本文主要是針對Unix環境下的C

目 錄

一.編譯與鏈接

二.特殊字符

三.數據類型

四.修飾符

五.運算符

六.控制語句

七.函數

八.指針

九.數組

十.字符串

十一.結構

十二.union聯合

十三.typedef聲明

十四.預處理器

十五.輸入輸出

十六.文件

十七.內存

十八.異常

十九.鏈表

二十.樹

正 文

一.編譯與鏈接

1.編譯

#cc program.c

生成a.out文件

?

這個名字是編譯器默認的輸出名。如果要修改可執行文件的名字可以加-o參數:gcc -o myexec main.c

這樣就把main.c編譯連接生成的可執行文件命名為myexec

gcc編譯器的編譯自定義格式

#cc?-o?hello?hello.c

#gcc?-o?hello?hello.c

使用gcc?編譯器就會為我們生成一個hello的可執行文件

?擴充閱讀:Linux編譯器GCC的使用

http://blog.csdn.net/21aspnet/article/details/1534108

http://blog.csdn.net/21aspnet/article/details/167420

補充說明:如果你實在基礎很差,那么需要在windows下借助VS2010這樣的可視化工具來調試了,這樣可以很清晰的看出內存中的指針

http://blog.csdn.net/21aspnet/article/details/6723758

?

2.執行

#./a.out

編譯多個源文件

#cc a.c? ?b.c?? c.c

?

3.產生目標文件

#cc -c program.c

產生program.o的目標文件以后供鏈接用

產生多個目標文件

#cc -c program.c? a.c? b.c

?

編譯指定名稱文件?

#cc -o sea a.c

4.鏈接幾個目標文件

#cc a.o? b.o? c.o

?

二.特殊字符

1.轉義字符

\\單斜線\

\\\\雙斜線\\

注意不是\\\代表\\,因為要2個\\

\'單引號

\"雙引號

\n換行

\r回車

\t制表

\f換頁

\a警告

?擴充閱讀:C語言 格式控制符 和 轉義字符

http://blog.csdn.net/21aspnet/article/details/1535459


2.注釋

方法一 /*?? */

方法二 //

?

3.保留字

?http://blog.csdn.net/21aspnet/article/details/1539252


4.?size_t??

是為了方便系統之間的移植而定義的

在32位系統上 ? 定義為 ? unsigned ? int
在64位系統上 ? 定義為 ? unsigned ? long

更準確地說法是 ? 在 ? 32位系統上是32位無符號整形
在 ? 64位系統上是64位無符號整形

size_t一般用來表示一種計數,比如有多少東西被拷貝等

?

三.數據類型

1.整型

singed 有符號

unsigned是無符號的意思,也就是說如果你的編譯系統給int分配的存儲單元的長度是2個字節的話,有符號的int 取值范圍是-32768(即2^15)——32767(即2^15-1),而無符號的unsigned  int就是0-65535(2^16-1)

?

類型

最小范圍

char

0-127

signed char

-127-127

unsinged char

0-255

int

-32767-32767

long?int

-2147483647-2147483647

unsinged int

0-65536

?int a=8;

int a=012;//8進制是0開頭

int a=0x0a;//16進制是0x開頭

3種輸出printf("%d",a);都是10


2.浮點

float double long double


3.布爾值

C語言中非0值為真,0值為假。

C語言沒有布爾類型,任何一個整型的變量都可以充當布爾變量,用0表示False,其它數(默認為1)表示True。

a = 1;
if(a) {printf("a is T\n");}else{printf("a is F\n");}//輸出T
a = 2;
if(a) {printf("a is T\n");}else{printf("a is F\n");}//輸出T
a = -1;
if(a) {printf("a is T\n");}else{printf("a is F\n");}//輸出T
a = 0;
if(a) {printf("a is T\n");}else{printf("a is F\n");}//輸出F
if(!a) {printf("a is T\n");}else{printf("a is F\n");}//輸出T

如果你想像Pascal一樣使用true和false,那么你可以包含頭文件stdbool.h。這樣你可以定義變量為bool類型并賦值為true或false。例如:

#include "stdbool.h"
bool a = true;
if (a) printf("a is true");

也可以使用

#define False 0

#define?True 1


4.類型轉換

float a;

int x=6,y=4;

a=x/y;

printf("%f",a)//輸出1.000000

因為6/4為1;1轉浮點為1.000000


如果不希望截斷需要精確結果要類型轉換

a=(float)x/y;


5.enum枚舉

enum A{a,b,c,d};

就是為了定義一組同屬性的值,默認的最前面的是0,后面的元素依次+1;
但是注意,每個枚舉都唯一定義一個類型,里面的元素的值不是唯一的,枚舉成員的初始化只能通過同一枚舉的成員進行!!

之所以不用整數而用枚舉是為了提高程序的可讀性

enum color
{
red,
green=2,
blue=4
}colorVal;printf("%d\n",red);	

?

6.位字段

結構體中字段冒號后數字表示該字段分配多少位

#include <stdio.h> 
#define MALE 0 ;
#define FEMALE 1 ;
#define SINGLE 0 ;
#define MARRIED 1 ;
#define DIVORCED 2 ;
#define WIDOWED 3 ;
main( )
{struct employee{ unsigned  gender : 1 ;unsigned  mar_status : 2 ;unsigned  hobby : 3 ;unsigned  scheme : 4 ;} ;struct employee  e ;e.gender = MALE ; e.mar_status = DIVORCED ;e.hobby = 5 ;e.scheme = 9 ;printf ( "\nGender = %d", e.gender ) ;printf ( "\nMarital status = %d", e.mar_status ) ;printf ( "\nBytes occupied by e = %d", sizeof ( e ) ) ;
}

7.左值和右值

左值:對象被修改;

右值:使用對象的值。


四.修飾符

1.變量

取變量的值可以直接=變量

給變量賦值一定要&


2.類型限定符const

const是一個C語言的關鍵字,它限定一個變量不允許被改變

使用const在一定程度上可以提高程序的健壯性,另外,在觀看別人代碼的時候,清晰理解const所起的作用,對理解對方的程序也有一些幫助。


const int a=15;//必須聲明時賦值

?int const a=15;//必須聲明時賦值,const在前在后都可以

聲明好以后再賦值會報錯

const int a;

a=15

------------------------

其次:在函數中聲明為const的形參是因為函數沒有改變所指向的值的內容

int ax(const int *p)

{

int a=*p+1;

return a;

}


試圖改變*p指向的值會報錯

int display(const int * p)
{
return ++*p;
}

const int和int const是一樣的效果

int display(int const * p)
{
return ++*p;
}


可以執行的,因為此刻是*p可以改變,不能改變的是p

int display(int? * const p)
{
return ++*p;
}

如果上述3段代碼中return ++*p;改為return *p++;那么完全相反的結果

總結:只要const在*前那么保護的就是指針指向的結果,如果const在*后那么保護的是指針

擴充閱讀:http://blog.csdn.net/21aspnet/article/details/160197


3.存儲類型

存儲類型
存儲位置
默認初始值
作用域
生存周期
自動內存不可預料限定在變量定義的局部塊從變量定義處到控制還處在變量定義的塊內
寄存器cpu寄存器無意義變量定義的局部塊從變量定義處到控制還處在變量定義的塊內
靜態內存0變量定義的局部塊不同函數調用間,變量值不變
外部內存0全局程序結束前

4.static 變量

是C程序編譯器以固定地址存放的變量,只要程序不結束,內存不被釋放.

static int a=5;

函數內的static變量只有函數內可以訪問;

函數外的static變量只有該文件內的函數可以訪問。

1).局部變量在函數內重新進入時保持原有的值不會初始化

#include<stdio.h>
int fun1()
{
static int v=0;
v++;
return v;
}

int main(int argc, char *argv[])
{
?int a1,a2,a3,a4;
??? a1=fun1();
?a2=fun1();
?a3=fun1();
?a4=fun1();
?return 0;
}

輸出:1234

?

2).與extern一起使用,創建一種私有機制,對函數和變量限制的作用。靜態外部變量作用域從聲明位置開始直到當前文件結束。對于當前文件更前位置或者其他文件函數不可見。

#include<stdio.h>
static int v=0;

int fun1()
{
v++;
return v;
}

int fun2()
{
v++;
return v;
}

int main(int argc, char *argv[])
{
?int a1,a2,a3,a4;
??? a1=fun1();
?a2=fun2();
?a3=fun1();
?a4=fun2();
?return 0;
}

輸出:1234

?


?

5.static函數

函數如果沒有聲明那么就是extern,外部鏈接

如果是static的函數,說明是內部鏈接,即只有此函數的文件內部可以調用。

好處:易維護;減少名字污染

擴充閱讀:C語言的一個關鍵字——static


6.extern變量

extern int i;

extern存儲類型使幾個源文件共享同一個變量

外部變量 定義在程序外部,所有的函數和程序段都可以使用.

extern可以置于變量或者函數前,以標示變量或者函數的定義在別的文件中,提示編譯器遇到此變量和函數時在其他模塊中尋找其定義。
另外,extern也可用來進行鏈接指定。


頭文件f1.h

int a=5;//定義

主文件f2.c

#include "f.h" //引用,注意不能<"f.h">

extern int a;//聲明

printf("%d",a);


7.auto 變量

是用堆棧(stack)方式占用儲存器空間,因此,當執行此區段是,系統會立即為這個變量分配存儲器空間,而程序執行完后,這個堆棧立即被系統收回.在大括號{}內聲明.


8.register 變量
寄存器變量,是由寄存器分配空間,訪問速度比訪問內存快,加快執行速度.寄存器大小有限.
注意:register int a=1;只能函數內 而不能函數外,由于寄存器的數量有限(不同的cpu寄存器數目不一),不能定義任意多個寄存器變量

extern 和static可以函數外

register int a=1;

但是如果int *b=&a;這樣會報錯,因為不可以取到寄存器變量的地址

但是使用VS2010調試時可以用&a.


擴充閱讀:寄存器register介紹

擴充閱讀:變量屬性

9.volatile變量

編譯器不要對變量優化,每次使用變量,直接從內存調入寄存器操作,然后結果返回內存。

否則,編譯器可能會對變量代碼優化。

volatile int i;



10.鏈接屬性

external外部

internal內部

none無



五.運算符

1.操作符

+-*/%

?

2.邏輯運算符

&&與

||或

!非

?

3.條件運算符

a>5?b-6:c/2

a大于5就執行b-6否則執行c/2

?

4.++

i++和++i
作用一樣,就是將i的值加1.
但是如果除了++之外還有別的運算符的話就要考慮先加后加的問題了。
例如:
while(i++<10);
先將i的值與10比較,再將i的值加1.

while(i++<10);
先將i的值與10比較,再將i的值加1.


5.位移和位操作符

<<左移用法:
格式是:a<<m,a和m必須是整型表達式,要求m>=0。
功能:將整型數a按二進制位向左移動m位,高位移出后,低位補0。
>>右移用法:
格式是:a>>m,a和m必須是整型表達式,要求m>=0。
功能:將整型數a按二進制位向右移動m位,低位移出后,高位補0

&位與

|位或

^位非


六.控制語句

1.if...else...

如果if后沒有大括號--{,那么if判定為真只會調用之后的第一句代碼,其余的走else邏輯。

需要注意的是真假的判斷,參考23條。

int a=0;

int a=NULL;

if(a)

{

//a為非0和NULL才進來

}
int d1=NULL;
?char* s1;
?struct node* head=createNode("0","0");
if(d1)
{
d1=1;
}int d1=NULL;
?char* s1;
?struct node* head=createNode("0","0");
if(d1)
{
d1=1;
}int d1=NULL;
?char* s1;
?struct node* head=createNode("0","0");
if(d1)
{
d1=1;
}


2.while循環

i=0;a=0;

while(i<10)

{

a=a+i;

i++;

}

?

break:退出大循環

continue:退出本次循環


3.for循環

常用寫法

int i;

for(i=0;i<2;i++)

{

}


特殊寫法

for(;;)


4.do....while循環

無論如何要先做一次do然后去while


5.switch語句

switch(ch){

case "A":

i+1;

break;

case "B":

i+2;

break;

default:

i=0;

}


6.goto跳轉

goto AA;

AA:if...else

建議不要用goto

七.函數

1.定義

int a=1;

int b=2;

ext1(a,b);

ext1(int x.int y)

{

int temp=x;

x=y;

y=temp;

prinft("x=%d,y=%d",x,y)

}


2.內聯函數inline

首先要聲明

inline int 函數名(參數)

后面要有一個真實的函數體

inline int 函數名(參數)

{

}

只有三二行的代碼,建議使用內聯!這樣運行速度會很快,因為加入了inline 可以減少了,跳入函數和跳出函數的步驟!

inline 定義的類的內聯函數,函數的代碼被放入符號表中,在使用時直接進行替換,(像宏一樣展開),沒有了調用的開銷,效率也很高。?

另外要注意,內聯函數一般只會用在函數內容非常簡單的時候,這是因為,內聯函數的代碼會在任何調用它的地方展開,如果函數太復雜,代碼膨脹帶來的惡果很可能會大于效率的提高帶來的益處。


3.宏定義

#define SQUARE(x)?? x*x

程序中寫SQUARE(3)?? 實際等于3*3

宏使程序速度更快,但是宏增加程序的大小。

但是,將參數傳遞給函數,再從函數獲得返回值,時間開銷大。而宏已經在編譯前存儲到源碼中。


4.main函數的參數

argc:命令行參數個數;

argc:命令行參數數組;

env:環境變量數組;

#include <stdio.h>
int main(int argc,char *argv[],char *env[])
{
? ? int i;
? ? for(i=0; i<argc; i++)
? ? ? ?printf("argv[%d]=%s\n",i,argv[i]);
? ? for(i=0; env[i]!=NULL; i++)?
? ? ? ?printf("env[%d]:%s\n",i,env[i]);?
? ? return 5;
}


?

八.指針

指針只能指向地址!

指針的指針是為了取得“地址”,因為指針只是指向“主體”

指針三視圖

圖1:指針和變量關系


圖2:指向同一個地址的指針


圖3:指向動態分配結構體的指針

typedef struct node
{
?? ?int value;
?? ?//注意不要在此用Node,不然會有“警告:從不兼容的指針類型賦值”
?? ?struct node *link;
}Node;



=====================指針總結======================

首先:聲明和使用要分開,不能混用

聲明一個指針出三值:指針變量的地址,指針指向變量的地址,指針指向變量的值(間接)

普通變量只有兩值:變量地址,變量值


聲明

int * 指針變量=&變量;


使用

1.? (* 指針聲明) 即:&地址對于的內存值,也就是變量值;

2.? 指針聲明????? 即:&地址,也就是變量地址

3.? &指針聲明?? 即:指針變量的地址

=====================指針總結======================


int? a;

int *b=&a;

int **c=&b;

a=1;

*b=2;

指針要對應級別,一級b對應一級&a,二級c對應二級&b。

如果傳值原代碼塊無星

main()

{

swap(a,b,c)

}

swap(int a,int *b,int **c)

{

a=*b+**c;//這樣不能改變值

*b=a+**c;//可以改變值

}

函數里要改變原值只有指針

printf("%d",*b);//輸出2

printf("%d",a);//輸出2

?

//指針和字符串

char *?ch="abc";

char * cp=ch;

printf("%s",cp);//輸出abc

?

//指針和字符

char? ch=‘a’;

char * cp=&ch;

printf("%c",*cp);//輸出a

?

//指針和數組

int a1[]={1,2,3,4,5};
printf("%d",&a1[2]);
int *b=&a1[2];


空指針

void*這不叫空指針,這叫無確切類型指針.這個指針指向一塊內存,卻沒有告訴程序該用何種方式來解釋這片內存.所以這種類型的指針不能直接進行取內容的操作.必須先轉成別的類型的指針才可以把內容解釋出來.

還有'\0',這也不是空指針所指的內容. '\0'是表示一個字符串的結尾而已,并不是NULL的意思.

真正的空指針是說,這個指針沒有指向一塊有意義的內存,比如說:
char* k;
這里這個k就叫空指針.我們并未讓它指向任意地點.
又或者
char* k = NULL;
這里這個k也叫空指針,因為它指向NULL 也就是0,注意是整數0,不是'\0'
一個空指針我們也無法對它進行取內容操作.
空指針只有在真正指向了一塊有意義的內存后,我們才能對它取內容.也就是說要這樣
k = "hello world!";
這時k就不是空指針了.

	int i=2;void *p;p =&i;printf("Values of I is=%d\n",p);//輸出地址printf("Values of I is=%d\n",*p);//報錯printf("Values of I is=%d\n",(*(int *)p));//輸出i值

void *使用場景:當進行純粹的內存操作時,或者傳遞一個指向未定類型的指針時,可以使用void指針,void指針也常常用作函數指針。

用空指針終止對遞歸數據結構的間接引用

用空指針作函數調用失敗時的返回值。

用空指針作警戒值


NULL指針

char *q;
?? ?q=NULL;
?? ?printf("Location 0 contains %d\n",q);

輸出0說明機器允許讀取內存地址0;否則說不允許


指針++

??? int i=1;
??? int *p;
??? p =&i;
?? ?printf("%d\n",p);

?? ?(*p)++;
?? ?printf("%d\n",p);
?? ?printf("%d\n",*p);
?? ?
?? ?*p++;
?? ?printf("%d\n",p);
?? ?printf("%d\n",*p);

輸出:

-1078959176
-1078959176
2
-1078959172
-1078959172

可以看出(*p)++改變指針指向的值,?*p++改變指針自己,因為int在32位下是4位。


函數指針

#include <stdio.h>
void display();
void main()
{void( *func_ptr )();func_ptr = display;  /* assign address of function */ printf("\nAddress of function display is %u", func_ptr );( *func_ptr)( );  /* invokes the function display( ) */
}void display()
{puts ("\nLong live viruses!!");
}
輸出:

Address of function display is 134513698
Long live viruses!!


函數指針使用場景

1.Windows中回調機制

2.C++運行期間動態綁定函數


指針的指針**

主要用在鏈式數據結構中,特別是當函數的實際參數是指針變量時。有時候希望函數通過指針指向別處的方式改變此變量。而這就需要指向指針的指針。

為了從鏈表中刪除一個元素,向函數傳遞一個待改變的指向指針的指針。


擴展閱讀:

把指針說透?

http://blog.csdn.net/21aspnet/article/details/317866

C指針本質

http://blog.csdn.net/21aspnet/article/details/1539652

?

九.數組

1.數組定義

int a[]={1,2,3,4,5}

a[0]//用序號輸出數組元素,默認下標從0開始

求數組長度:printf("%d\n",sizeof(a)/sizeof(a[0]));

int *ap=a+2;

ap[0];//輸出3

int a[]={1,2,3,4,5,6};//自動計算數組長度

循環數組可以用2種方法

int i;

for(int i;i<6;i++)

{

a[i];這樣輸出

或者*(a+i);因為*(a)指向數組第一個元素的指針

}


2.指針訪問數組

int *p=a;注意不是&a;

可以三種方法輸出

p[i];方法一就是數組元素

*(p+i);方法二

for()

{

printf("%d",*p);//方法三

p++;

}?

如果? int? const p=a;

用上述代碼linux下一樣可以編譯

?

3.數組的地址:

int num[]={24,25,26}

數組的首地址有三種方法獲取:

num

&num

&num[0]

   int num[3]={11,2,13};printf("\n%d",num);printf("\n%d",&num);printf("\n%d",&num[0]);

輸出都是同一地址


4.數組的值

數組的值有四種方法獲取:

num[i]

*(num+i)

*(i+num)

i[num]

?

地址:&num[i]

值:num[i]

#include <stdio.h>  int main(void)  
{  int marks[3]={11,2,13};printf("\n%d",marks);printf("\n%d",&marks[0]);int i=77,*p;p=&i;printf("\n%d",*p);for(i=0;i<10;i++){p++;printf("\n%d",*p);}
}


5.傳遞數組

#include <stdio.h>  int main(void)  
{  int marks[3]={11,2,13};int i=77,*p;/*printf("\n%d",marks);printf("\n%d",&marks[0]);p=&i;printf("\n%d",*p);for(i=0;i<10;i++){p++;printf("\n%d",*p);}for(i=0;i<10;i++){printf("Please input :\n");scanf("%d",&marks[i]);}*/for(i=0;i<3;i++){printf("\n%d",&marks[i]);display(&marks[i]);}display(marks);display(&marks[0]);printf("\n");
}  display(int *m)
{
printf("\n%d",*m);
}




6.多維數組

char a[][10]={
"abc",
"cnn",
"bbc",
};
char *names[]={
"abc",
"cnn",
"bbc",
};
printf("\n%s",names[2]);
printf("\n%s",&names[2]);
printf("\n%s",a[2]);
printf("\n%s",&a[2][0]);
printf("\n%s",&a[2][1]);

輸出

bbc
bbc
bbc
bc


內存視圖

int a[2][3]={1,2,3,4,5,6};

a[0][0]=1;

a[0][1]=2;

a[0][2]=3;

int a[2][3]={

{1,2,3},

{4,5,6}

};

多維數組只有第一維可以缺省,其余維都要顯示寫出

int a[][3]={1,2,3,4,5,6};

//聲明指針數組,每個指針元素都初始化為指向各個不同的字符串常量

char const keyword[]={

"do";

"doo";

"doooo";

"do";

"doo";

"do";

"doooooo";

}

//聲明矩陣,每一維長度都是9,不夠用0補齊

char const keyword[][9]={

"do";

"doo";

"doooo";

"do";

"doo";

"do";

"doooooo";

}

?

擴展閱讀:C語言中字符數組和字符串指針分析

http://blog.csdn.net/21aspnet/article/details/1539928

?

十.字符串

1.定義

char msg[]={'a','b','c'}

char msg[]={'a','b','c','\0'}

char msg[]={"ABC"}

char *p;或者char *p1="ABC";
p=msg;

一開始不指定字符串內容,就需要定義長度:char? s[20];

2.輸出字符串

方法一

char name[]={'A','B','C'};
int i=0;
while(i<=2)
?? {
?? printf("\n%c",name[i]);? ?
?? i++;
?? }

方法二

while(name[i]!='\0')
?? {
?? printf("\n%c",name[i]);? ?
?? i++;
?? }

方法三

?? while(*p!='\0')
?? {
?? printf("\n%c",*p);? ?
?? p++;
?? }

方法四

char name[]={"ABC"};
printf("\n%s",name);


數組賦值

數組=數組???????????? [不可以]

指針=字符串???????? [可以] ???

指針=地址 ??????? [可以] ???
strcpy(數組,數組)? [可以]


指針字符串數組內存示意圖

char day[15] = "abcdefghijklmn";//定義一

char day[] = "abcdefghijklmn";//定義一
char * str="abcdefghijklmn";//定義二

windows下VS2010調試窗口看區別


char str[20]="0123456789";//str是編譯期大小已經固定的數組
int a=strlen(str); //a=10;//strlen()在運行起確定
int b=sizeof(str); //而b=20;//sizeof()在編譯期確定

sizeof 運算符是用來求內存容量字節的大小的。而strlen是用來求字符串實際長度的。


3.二維字符數組

char a[][10]={
"abc",
"cnn",
"bbc",
};
char *names[]={
"abc",
"cnn",
"bbc",
};
printf("\n%s",names[2]);
printf("\n%s",&a[2][0]);


內存示意圖

char *a[4]={"this","is","a","test"};
char **p=a;

擴展閱讀:C語言字符串處理庫函數

?http://blog.csdn.net/21aspnet/article/details/1539970

?

十一.結構

1.聲明

注意結構一定要};結束

聲明一

struct? simple{

int a;

int b;

};

使用

struct? simple s1;

s1.a=1;

?

聲明二

typedef struct {

int a;

int b;

};simple

使用

simple s1;

s1.a=1;

注意:方法二比一少寫一個struct

?

2.結構初始化

typedef struct {

int a;

int b;

};simple{1,2}

使用

simple.a;//輸出1

?

3.指向結構的指針

區結構地址必須要用&,但是數組卻即可以用&也可以不用

struct data?{

int a;

int b;

};data1{1,2}

struct data *p;

p=&data1;

(*p).a;//輸出1

p->b;//輸出2


struct book {char name[20];int callno;};struct book b1={"abc",100};struct book *b2;b2=&b1;printf("\n%s %d",b1.name,b1.callno);printf("\n%s %d",b2->name,(*b2).callno);

輸出:

abc 100
abc 100


4.成員運算符點"."和指向結構體成員運算符"->"的區別
兩者都是用來引用結構體變量的成員,但它們的應用環境是完全不一樣,前者是用在一般結構體變量中,而后者是與指向結構體變量的指針連用,例如:有定義
? struct student
?? {
??? long num;
??? float score;
?? };
?? struct student stud, *ptr=&stud;
?則stud.num、stud.score、ptr->num等都是正確的引用方式,但ptr.num、stud->num就是不允許的,其實ptr->num相當于(*ptr).num,只是為了更為直觀而專門提供了這->運算符。
最后指出,這兩者都具有最高優先級,按自左向右的方向結合。

5.結構數組參數

#include <stdio.h>  
struct book{char name[20];int callno;};int main(void)  
{  struct book b1={"abc",100};struct book *b2;b2=&b1;printf("\n%s %d",b1.name,b1.callno);printf("\n%s %d",b2->name,(*b2).callno);show(b1);show_(b2);printf("\n");
}  
show(struct book m)
{
printf("\n%d",m.callno);
}
show_(struct book  *m)
{
printf("\n%d",(*m).callno);
printf("\n%d",m->callno);
}

輸出:

abc 100
abc 100
100
100

所以:->就相當于*


擴展閱讀:

結構的成員訪問?

typedef struct 用法詳解和用法小結

typedef的四個用途和兩大陷阱


十二.union聯合

1.定義

聯合也叫共同體,和結構struct很像

struct可以定義一個包含多個不同變量的類型,每一個變量在內存中占有自己獨立的內存空間,可以同時存儲不同類型的數據。
uniion也可以定義一個包含多個不同變量類型,但這些變量只共有同一個內存空間,每次只能使用其中的一種變量存儲數據。

問題是這樣做有什么意義?

union{
? ? ? ? ? ? int ? a;
? ? ? ? ? ? float ? b;
? ? ? ? ? ? char ? ? c;
? ? ? ? ? ? }a;?
?????????????a.b=10.123;??printf("%d",a.a);

雖然沒有初始化a,一樣可以使用!因為a,b,c共用同一塊內存。



十三.typedef聲明

typedef為C語言的關鍵字,作用是為一種數據類型定義一個新名字。
這里的數據類型包括內部數據類型(int,char等)和自定義的數據類型(struct等)。
在編程中使用typedef目的一般有兩個,一個是給變量一個易記且意義明確的新名字,另一個是簡化一些比較復雜的類型聲明。

typedef與結構結合使用
typedef struct tagMyStruct
{
 int iNum;
 long lLength;
} MyStruct;


這語句實際上完成兩個操作:
1) 定義一個新的結構類型
struct tagMyStruct
{
 int iNum;
 long lLength;
};
2) typedef為這個新的結構起了一個名字,叫MyStruct。
typedef struct tagMyStruct MyStruct;
因此,MyStruct實際上相當于struct tagMyStruct,我們可以使用MyStruct varName來定義變量。

typedef int k;

k k1=10;

此聲明定義了一個 int 的同義字,名字為k。注意 typedef 并不創建新的類型。它僅僅為現有類型添加一個同義字。

typedef struct node
{
?? ?int value;
?? ?struct node *link;
}Node;

注意不要寫成

typedef struct node
{
?? ?int value;
??? Node *link;
}Node;

不然會有警告:警告:從不兼容的指針類型賦值

所以在結構中的嵌套結構不要用typedef的聲明!


十四.預處理器

1.define常量

#defined MMX 50

printf("%d",MMX);

使用define更高效,可讀性更好。


2.include文件包含

#include "filename"


3.條件編譯

形式一

#ifdef

#else

#endif

形式二

#ifndef

#else

#endif

形式三

#if

#else

#endif

非0 為真

?選擇功能是否加入,在編譯階段。

作用一:調試開關。

#define DEBUG//定義可調試 不定義則不

#ifnedf DEBUG

?

#ifdef

作用二:便于確定哪些頭文件沒有編譯

#ifnedf FILE_H_

#define FILE_H_

總結:

#define ? ? 定義宏
#undef ? ? ?取消已定義的宏
#if ? ? ? ? 如果給定條件為真,則編譯下面代碼
#ifdef ? ? ?如果宏已經定義,則編譯下面代碼
#ifndef ? ? 如果宏沒有定義,則編譯下面代碼
#elif ? ? ? 如果前面的#if給定條件不為真,當前條件為真,則編譯下面代碼
#endif ? ? ?結束一個#if……#else條件編譯塊
#error ? ? ?停止編譯并顯示錯誤信息

擴展閱讀:http://blog.csdn.net/21aspnet/article/details/6737612


十五.輸入輸出

1.Printf輸出

格式

%d有符號短整型??? %u無符號短整型

%ld有符號長整型?? %lu無符號長整型

%x無符號16進制??? %o無符號8進制

%f浮點型???????????????? %lf double浮點型

%c字符 ?????????????????? %s字符串


printf("putout %d %f",a,b)

注意:printf會輸出中文亂碼,其實是SecureCRT這樣的終端編碼格式問題,設置為默認即可。


控制符

dd 指定字段寬度的位數

.???? 區分字段寬度與精度的小數點

-???? 在指定的字段狂度內左對齊

\n換行符

printf("%4d",a);//

輸出:?? 1


2.scanf輸入

int d=0;

注意是scanf("%d",&d)

這里千萬要注意如果寫為scanf("d%",&d)一樣可以編譯通過,但是會引起隱含的bug!!!

注意是&d而不是d,因為是改變變量的地址對應的內容,而不是直接取其值

#include <stdio.h> ?
main()
{
int a=1;
char c='z';
char s[]="hello";
scanf("%d %c %s",&a,&c,&s);
printf("\n%d",a); ?
printf("\n%c",c);
printf("\n%s",s);
printf("\n"); ?
}

注意:scanf會以回車結束,但是讀到空白就認為輸入結束,空白后面的內容會忽視。。。


3.gets與puts

warning: the `gets' function is dangerous and should not be used.

gets從鍵盤獲得一個字符串,按回車終止,但是使用gets會提示警告!

puts一次輸出一個字符串與printf不同,prints中可以插入字符。所以puts只能用多個變通實現。

char ss[30];
gets(ss);
printf("\n%s",ss);?

puts("\noutput:");
puts(ss);
printf("\n");?


4.fgets與fputs

fgets可以避免scanf的局限
fgets()函數的基本用法為: fgets(char * s,int size,FILE * stream);

char name[20]; ?
printf("\n 輸入任意字符 : "); ?
fgets(name, 20, stdin);//stdin 意思是鍵盤輸入 ?
fputs(name, stdout); //stdout 輸出 ?
printf("\n");

?

fgets比gets安全
為了安全,gets少用,因為其沒有指定輸入字符的大小,限制輸入緩沖區得大小,如果輸入的字符大于定義的數組長度,會發生內存越界,堆棧溢出。后果非常嚴重!
?fgets會指定大小,如果超出數組大小,會自動根據定義數組的長度截斷。


十六.文件

fopen打開文件

FILE結構體已定義在stdio.h中

文件末尾標志是ASCII碼26,fgetc讀到該特殊字符返回宏指令EOF

fclose關閉文件


1.字符讀寫

fgetc 從當前指針位置讀取一個字符,然后將指針前進一個位置,指向下一個字符,返回讀取的字符。

fputc 將字符寫入文件


讀文件套路

FILE * fp;

fp=fopen("文件地址","r");

char ch;

ch=fgetc(fp)

#include <stdio.h>
#include <stdlib.h>
void main()
{
FILE * fp;
char ch;
fp=fopen("a.c","r");
if(fp==NULL){
//如果文件不存在的話
puts("can't open file!");
exit(1);
}while(1)
{
ch=fgetc(fp);
if(ch==EOF)
{
break;
}
printf("%c",ch);
}
fclose(fp);
}
注意:如果不包含頭文件stdlib.h,編譯后就出現了警告:隱式聲明與內建函數’exit’不兼容。

文件打開模式:

無法打開返回NULL

r:讀。

w:寫。

a:末尾追加。文件不存在則創建。

r+:開頭讀寫

w+:覆蓋讀寫

a+:末尾追加讀寫

對于二進制文件要加b

rb,wb等


2.字符串讀寫

puts

gets

fputs 將字符串寫入文件

fgets 一次只讀取一行


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main( )
{
?? ?FILE? *fp ;
?? ?char? s[80] ;
?? ?fp = fopen ("pr1.txt", "w");
?? ?if (fp == NULL)
?? ?{
?? ??? ?puts ( "Cannot open file") ;
?? ??? ?exit(1) ;
?? ?}
?? ?printf ("\nEnter a few lines of text:\n");
?? ?while (strlen (gets (s)) > 0)
?? ?{
?? ??? ?fputs (s, fp);
?? ??? ?fputs ("\n", fp);
?? ?}?? ?
?? ?fclose (fp) ;
}


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main()
{
FILE * fp;
char s[30];
fp=fopen("a.txt","r");
if(fp==NULL){
puts("can't open file!");
exit(1);
}

while(fgets(s,20,fp)!=NULL)
{
printf("%s",s);
//fputs(s,fp);
//fputs("\n",fp);
}
fclose(fp);
}

如果是來自鍵盤:fgets(name,?20,?stdin);//stdin?意思是鍵盤輸入

3.fprintf和fscanf行

這兩個函數分別是格式化輸出和格式化輸入函數,按照指定的格式輸入數據或者在屏幕上輸出數據,例如“結構”。

fprintf與fscanf和printf與scanf的區別是多了用于存儲和讀取的文件

在運用fprintf與fscanf時,在向文件輸出數據及從文件讀取數據時,分隔符應該相一致。

#include <stdio.h>
#include <stdlib.h>
main( )
{FILE? *fp ;struct emp {char? name[40] ;int? age ;float? bs ;};struct emp? e;fp = fopen ( "pr1.txt", "w" ) ;if ( fp == NULL )?? ?{puts ( "Cannot open file" ) ;exit(1) ;}int i;for(i=0;i<4;i++){printf ( "\nEnter name, age and basic salary: " );scanf ( "%s %d %f", e.name, &e.age, &e.bs ) ;fprintf ( fp, "%s %d %f\n", e.name, e.age, e.bs ); }fclose ( fp );fp = fopen ( "pr1.txt", "r" ) ;if ( fp == NULL ){puts ( "Cannot open file" ) ;exit(1) ;}while ( fscanf ( fp, "%s %d %f", e.name, &e.age, &e.bs ) != EOF )printf ( "\n%s %d %f", e.name, e.age, e.bs ) ; fclose ( fp ) ;
}

輸出:


Enter name, age and basic salary: 北京 2008 51

Enter name, age and basic salary: 上海 2010 234.7

Enter name, age and basic salary: 廣州 2011 34

Enter name, age and basic salary: 香港 2020 78

北京 2008 51.000000
上海 2010 234.699997
廣州 2011 34.000000
香港 2020 78.000000


4.fwrite和fread塊

fwrite和fread函數讀寫大的數據塊。主要用于二進制流。

1.函數功能
? 用來讀寫一個數據塊。
2.一般調用形式
? fread(buffer,size,count,fp);
? fwrite(buffer,size,count,fp);

3.說明
? (1)buffer:是一個指針,對fread來說,它是讀入數據的存放地址。對fwrite來說,是要輸出數據的地址。
? (2)size:要讀寫的字節數;
? (3)count:要進行讀寫多少個size字節的數據項;
? (4)fp:文件型指針。

注意:
1 完成次寫操(fwrite())作后必須關閉流(fclose());
2 完成一次讀操作(fread())后,如果沒有關閉流(fclose()),則指針(FILE * fp)自動向后移動前一次讀寫的長度,不關閉流繼續下一次讀操作則接著上次的輸出繼續輸出;
3 fprintf() : 按格式輸入到流,其原型是int fprintf(FILE *stream, const char *format[, argument, ...]);其用法和printf()相同,不過不是寫到控制臺,而是寫到流罷了。注意的是返回值為此次操作寫入到文件的字節數。

#include <stdio.h>
#include <stdlib.h>
main( )
{FILE  *fp ;struct emp {char  name[40] ;int  age ;float  bs ;};struct emp  e;fp = fopen ( "pr1.txt", "w" ) ;if ( fp == NULL )	{puts ( "Cannot open file" ) ;exit(1) ;}int i;for(i=0;i<4;i++){printf ( "\nEnter name, age and basic salary: " );scanf ( "%s %d %f", e.name, &e.age, &e.bs ) ;//fprintf ( fp, "%s %d %f\n", e.name, e.age, e.bs ); fwrite(&e,sizeof(e),1,fp);}fclose ( fp );fp = fopen ( "pr1.txt", "r" ) ;if ( fp == NULL ){puts ( "Cannot open file" ) ;exit(1) ;}	//while (fscanf ( fp, "%s %d %f", e.name, &e.age, &e.bs ) != EOF)while (fread (&e,sizeof(e),1,fp)==1)printf ( "\n%s %d %f", e.name, e.age, e.bs ) ; fclose ( fp ) ;
}


5.文件復制


復制文本文件(用r)

#include <stdio.h>
#include <stdlib.h>
main( )
{FILE  *fs, *ft ;char  ch ;fs = fopen ( "pr1.txt", "r" ) ;if ( fs == NULL ){puts ( "Cannot open source file" ) ;exit(1) ;}ft = fopen ( "pr2.txt", "w" ) ;if ( ft == NULL ){puts ( "Cannot open target file" ) ;fclose ( fs ) ;exit(1) ;}while ( 1 ){ch = fgetc ( fs ) ;if ( ch == EOF )break ;elsefputc ( ch, ft ) ;}fclose ( fs ) ;fclose ( ft ) ;
}

復制二進制文件 (用rb)

#include <stdio.h>
#include <stdlib.h>
main( )
{FILE  *fs, *ft ;int ch ;fs = fopen ( "pr1.exe", "rb" ) ;if ( fs == NULL ){puts ( "Cannot open source file" ) ;exit(1) ;}ft = fopen ( "newpr1.exe", "wb" ) ;if ( ft == NULL ){puts ( "Cannot open target file" ) ;fclose ( fs ) ;exit(1) ;}while ( 1 ){ch = fgetc ( fs ) ;if ( ch == EOF )break ;elsefputc ( ch, ft ) ;}fclose ( fs ) ;fclose ( ft ) ;
}


十七.內存

1.內存分配

程序中局部變量上分配空間,系統自動分配管理;

動態分配內存在上,需要用戶釋放。

都在<stdlib.h>

申請內存:malloc

重新申請:realloc

釋放內存:free


#include <stdio.h>
#include <stdlib.h>
main()
{
? ? int i;
? ? char c,*p;
? ? p = (char *)malloc(10);//分配十個字節的緩存區
? ? for(i=0;;i++)
? ? {
? ? ? ? c = getchar();//從鍵盤讀取單個字符數據
? ? ? ? if(i>9)
? ? ? ? {
? ? ? ? ? ? p = (char *)realloc(p,1);//重新增加申請一個字節的空間
? ? ? ? }
? ? ? ? if(c == '\n')
? ? ? ? {
? ? ? ? ? ? p[i] = '\0';
? ? ? ? ? ? break;
? ? ? ? }
? ? ? ? else
? ? ? ? {
? ? ? ? ? ? p[i] = c;//將輸入的字符保存到分配的緩存區
? ? ? ? }
? ? }
? ? printf("%s\n",p);
? ? free(p);//釋放內存
}


2.memset

void *memset(void *s, int ch, size_t n);
函數解釋:將s中前n個字節替換為ch并返回s;
memset:作用是在一段內存塊中填充某個給定的值,它是對較大的結構體或數組進行清零操作的一種最快方法。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main(){
char a[5];
memset(a,'1',sizeof(a));
printf("%s\n",a);


char buffer[] = "Hello world\n";
printf("Buffer before memset: %s\n", buffer);
memset(buffer, '*', strlen(buffer) );
printf("Buffer after memset: %s\n", buffer);
}

輸出:



3.動態內存分配

動態內存分配是為了鏈表,否則只能用數組

使用malloc和free分配和釋放

#include <malloc.h>//malloc
#include <stdlib.h>//exit’
int * p;

p=malloc(100);

if(p==NULL)

{

printf("Out of memory!\n");

exit(1);

}

實際中p=malloc(sizeof(int));獲得足夠1個整數的內存
實際中p=malloc(10*sizeof(int));獲得足夠10個整數的內存

擴展閱讀:C語言內存動態分配

http://blog.csdn.net/21aspnet/article/details/146968

?

十八.異常

1.perror

perror("fff");

perror ()用 來 將 上 一 個 函 數 發 生 錯 誤 的 原 因 輸 出 到 標 準 設備 (stderr) 。參數 s 所指的字符串會先打印出,后面再加上錯誤原因字符串。此錯誤原因依照全局變量error 的值來決定要輸出的字符串。

# ./a.out
fff: Success


九.鏈表

定義鏈表

//先定義一個結構體

?typedef struct node{

int data;//數據域

struct node * next;//指針域? ,是struct node的成員,又指向struct node類型的的數據,這里存放下個結點的地址

}Node;

?

建立鏈表

//返回類型是之前定義的結構體

Node * creat()

{?

//需要先定義3個節點

Node * head=NULL;//頭結點

Node *p=NULL;//指向原鏈表的最后一個結點

Node *s=NULL;//指向新節點

head=(Node*)malloc(sizeof(Node));//動態分配內存空間

head->next=NULL;//開始頭結點也就是尾結點

p=head;//p一開始指向頭結點

//用while循環

int c=1;//為0是退出循環的條件

int d=0;

while(c)

{

//使用scanf接受用戶數據數據

scanf("%d",&d);

if?(d!=0)//繼續輸入

{

s==(Node*)malloc(sizeof(Node));//定義新節點s,和定義head一樣

s->data=d;//給新節點賦值

p->next=s;//將第一個結點鏈接在第二個結點后面

p=s;//p繼續指向當前節點

}

else

{

c=0;//用戶輸入0結束 輸入

}

}

p->next=NULL;//結束輸入時將最后結點定義為尾結點

return head;

}

//輸出結點

output(Node * head)

{

//新定義一個指針用于遍歷

//其實如果head->data會是0;單鏈表巧妙的從第二個結點開始,頭結點沒用,但是并不代表沒用值!

Node * p=head->next;

while(p!=NULL)

{

printf("%d",p->data);

p=p->next;//注意while循環里一定要讓P指針不斷往下指向

}

}

//查找制定元素的順序

searchdata(Node *? head)

{

int t=0;

printf("請輸入您要查找的值:\n");

scanf("%d",&t);

Node * p=head->next;

int k=0;

while(p!=NULL)

{

k++;

if(p->data==t)

{

printf("%d是第%d個元素:\n",t,k);

break;

}

p=p->next;

}

if(p==NULL)

{

printf("沒找到");

}

}

//元素之間插入值?

insertdata(Node *? head)

{

Node *s=NULL;//指向新節點

s=(Node*)malloc(sizeof(Node));//動態分配內存空間

int t=0;

int i=0;

printf("請輸入您要查找的值:\n");

scanf("%d",&t);

printf("請輸入您要插在那個元素后面:\n");

scanf("%d",&i);

?

Node * p=head->next;

while(p!=NULL)

{

if(p->data==i)

{

s->data=t;

s->next=p->next;//注意是先指向新節點,再改舊節點

p-next=s;

printf("插入成功:\n");

break;

}

p=p->next;

}

if(p==NULL)

{

printf("沒找到\n");

}

}

擴展閱讀:

鏈表的C語言實現http://blog.csdn.net/21aspnet/article/details/146968

單鏈表功能大全 http://blog.csdn.net/21aspnet/article/details/159053

?

二十.樹

二十一.圖

二十二.算法


最后:雜項

1.隨機數

srand():生成隨機數種子

rand():生成隨機數

#include <stdio.h>
#include <stdlib.h>
main()
{
int i,j;
srand((int)time(0));//開始注釋這里
for(i=0;i<10;i++)
{
j=1+(int)(10.0*rand()/(RAND_MAX+1.0));
printf("%d ",j);
}
}

輸出:


說明:沒有調用srand每次產生的都是一樣的!

總結

以上是生活随笔為你收集整理的C和指针学习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

97品白浆高清久久久久久 | 久久久久久久久久久久久久av | 亚洲h在线播放在线观看h | 久久国产影视 | 在线观看网站你懂的 | 六月丁香久久 | 久久在线免费观看视频 | 中文永久字幕 | 国产精品黄色影片导航在线观看 | 成人黄色在线观看视频 | 久久久久亚洲精品成人网小说 | 成人永久视频 | av成人在线播放 | 97超碰人 | 亚洲视频电影在线 | 久久国产乱| 国产精品大全 | 欧美伦理一区二区三区 | 在线精品视频免费观看 | 综合色天天 | 在线观看免费高清视频大全追剧 | 国产中文字幕在线观看 | 日产av在线播放 | 久久久久女人精品毛片 | 午夜精品久久久久久久99热影院 | 亚洲综合色av | 国产1区在线观看 | 免费涩涩网站 | 在线亚洲免费视频 | 日韩精品在线免费观看 | 西西44人体做爰大胆视频 | 国产三级久久久 | 美女视频是黄的免费观看 | 午夜视频在线观看一区二区 | 久久福利精品 | 操久在线 | 色网免费观看 | 中文字幕 在线看 | 欧美日韩精品在线播放 | 91经典在线 | 成年人免费看的视频 | 亚洲视频在线免费看 | 婷婷精品 | 成年人免费在线观看 | 亚洲精品在线观 | 久草免费在线观看视频 | 久久草网站 | 久99久精品视频免费观看 | 麻豆传媒视频在线免费观看 | av免费网| 日韩在线精品视频 | 婷婷视频 | 91精品视频在线播放 | 国产精品中文在线 | 欧美a级成人淫片免费看 | 成人一级影视 | 在线成人中文字幕 | 中文字幕黄色 | 亚洲蜜桃av | 最近中文字幕久久 | 福利视频导航网址 | 久久久久99999 | 日日夜精品 | 成年人免费观看在线视频 | 亚洲va天堂va欧美ⅴa在线 | 99精品视频网站 | 天天干,天天操,天天射 | 国产91电影在线观看 | 久久观看免费视频 | 91福利影院在线观看 | 久久在线视频精品 | 免费网站看v片在线a | 免费黄色a级毛片 | 中文一区在线 | 超碰人人超碰 | 国产精品理论视频 | 国产精品国产三级国产aⅴ入口 | 久久激情五月激情 | 另类老妇性bbwbbw高清 | 国产成人综合在线观看 | 日韩精品中文字幕久久臀 | 日韩欧美网站 | 欧美视频不卡 | 九九精品在线观看 | 欧美日韩免费在线观看视频 | 最新av观看 | 久久久久久久久电影 | 天天操天天谢 | 色狠狠久久av五月综合 | 欧美精品久久久久久久免费 | 天天艹天天 | 国产中文字幕网 | 欧美一区二区精美视频 | 亚洲一区 av | 91精品免费看 | 在线中文字幕视频 | 色婷婷 亚洲 | 国产视频欧美视频 | 特黄特色特刺激视频免费播放 | 国产高清视频免费观看 | 国产一级精品视频 | 怡红院成人在线 | 亚洲精品ww | 在线a人v观看视频 | 日韩在线观看精品 | 婷婷六月色 | 亚洲一级电影 | 日韩欧美高清视频在线观看 | 精品久久91| 免费日韩在线 | 亚洲精品字幕在线观看 | 毛片www| 国产成人av网 | 欧美日韩一区二区久久 | 久草在线在线视频 | 国产不卡免费 | 亚洲精品免费在线 | www色婷婷com | 91人网站 | 国产午夜三级一区二区三 | 亚洲国产中文字幕 | 久久久久久高潮国产精品视 | 97超碰超碰 | 久久久免费毛片 | 欧洲一区二区三区精品 | 精品中文字幕视频 | 最新三级在线 | 国产精品久久久久久久久久久不卡 | 一区二区精品久久 | 人人爽人人爽人人爽 | 免费看片成人 | 色就色,综合激情 | 色黄www小说| 天天做天天射 | 中文字幕在线视频一区二区三区 | 天堂av在线7 | 9幺看片| www91在线观看 | 九九九九热精品免费视频点播观看 | 最新国产福利 | 久草免费福利在线观看 | 国产成人精品久久久久 | 久久久精品二区 | 成人国产在线 | 日韩色在线观看 | 在线精品视频免费观看 | 久久久久区 | 久久午夜精品视频 | 成年人看片网站 | 岛国大片免费视频 | 日韩黄色一级电影 | 91精品国 | 狠狠干狠狠插 | 欧美一区二区精品在线 | 人人藻人人澡人人爽 | 免费看一级黄色大全 | 亚洲国产精品电影在线观看 | 久草久热 | 国产手机免费视频 | 狠狠干成人综合网 | 黄色一级网 | 韩国一区二区三区在线观看 | 一区二区三区久久精品 | 亚洲黄色av网址 | 91精品1区2区| 亚洲乱码在线观看 | 日韩精品免费一区二区三区 | 日本狠狠干 | 日韩最新在线视频 | 成人黄在线观看 | 一区二区三区在线观看免费 | 国产123区在线观看 国产精品麻豆91 | 波多野结衣动态图 | 久久在线精品视频 | 久国产在线播放 | 日韩精品中文字幕在线播放 | 一区二区三区精品在线视频 | 中文字幕一区av | 色网站免费在线看 | 日韩综合视频在线观看 | 99在线视频网站 | 国产一区二区三区高清播放 | 欧美污在线观看 | 国产精品国产三级国产aⅴ无密码 | 久久国内精品视频 | 免费在线观看毛片网站 | 免费91麻豆精品国产自产在线观看 | 欧美色图30p | 天天爱天天插 | 欧美在线视频一区二区三区 | 99在线精品免费视频九九视 | 97精品国产97久久久久久春色 | 午夜在线观看影院 | 狠狠狠色丁香综合久久天下网 | 中文字幕免费观看视频 | 久草在线视频在线 | 免费在线观看成人av | 麻豆视频免费在线播放 | 久久精品久久99 | 亚洲va欧美va人人爽春色影视 | 一区二区三区在线视频111 | 日韩黄色中文字幕 | 亚洲一区二区三区四区精品 | 玖玖国产精品视频 | 91理论片午午伦夜理片久久 | 欧美一区二区三区激情视频 | 免费看黄在线网站 | 亚洲三级性片 | 成人免费在线网 | 亚洲免费专区 | 西西444www大胆无视频 | 香蕉久草| 99久久婷婷国产精品综合 | 日韩在线视频国产 | 毛片美女网站 | 成人久久久久久久久久 | 三级黄色在线观看 | 天堂av在线免费 | 日韩欧美有码在线 | 久久久国产一区 | 在线欧美中文字幕 | 天天干.com | 91精品久久久久久综合乱菊 | 91九色自拍| 福利视频第一页 | 草久在线观看视频 | 亚洲午夜在线视频 | 九九影视理伦片 | 91精品国产自产老师啪 | 国产精品日韩在线 | 又黄又爽又无遮挡的视频 | 日本三级在线观看中文字 | 免费在线a | 久久免费黄色大片 | 欧美另类xxx| 久久99亚洲精品久久 | 91网页版免费观看 | 丁香婷婷综合激情五月色 | 久久国产精品久久精品国产演员表 | 91网址在线 | 婷婷丁香色 | 国产一区二区三区网站 | 久久综合九色九九 | 国产成人一区二区三区在线观看 | 97超碰伊人 | 久久中文字幕在线视频 | 国产精品网站 | 国产91免费在线观看 | 99精品视频免费观看视频 | 亚洲国产精品成人va在线观看 | 亚洲精品观看 | 精品伊人久久久 | 91国内在线 | 91av在线播放视频 | 亚洲精品男女 | 91九色pron| 五月天电影免费在线观看一区 | 天天摸夜夜添 | 国产精品99久久久久久久久久久久 | 日韩高清在线不卡 | 黄色动态图xx| 99精品久久久 | 免费在线观看午夜视频 | 夜夜天天干 | 97热在线观看 | 中文字幕一区二区三区乱码不卡 | 黄色网在线播放 | 一区二区视频在线播放 | 国产精品 中文字幕 亚洲 欧美 | 日韩精品中文字幕av | www.色婷婷.com | 久久艹人人| 视频直播国产精品 | 日韩激情第一页 | av中文字幕在线看 | 久久影院中文字幕 | 五月开心婷婷网 | 国产精品久久久久久久av电影 | 天天操天天色天天射 | www.狠狠插.com | 欧美日韩在线视频免费 | 99热官网| 久久久综合九色合综国产精品 | 精品国产aⅴ一区二区三区 在线直播av | 91视频午夜 | 国产日韩精品在线观看 | 免费观看一级一片 | 国产精品视频免费 | 日日爽 | 免费a网站 | 日韩欧美亚州 | 国产成人精品一区二区三区免费 | 成人中文字幕+乱码+中文字幕 | 国产成人精品一区二区在线 | 国产精品12 | 97精品国产一二三产区 | 亚洲精品男人天堂 | 天天操狠狠操夜夜操 | 99在线视频观看 | 911av视频| 国产中文字幕视频在线观看 | 精品国产三级 | 婷婷去俺也去六月色 | 国产黄在线 | 亚洲成av| 国产免费观看久久黄 | 激情五月婷婷激情 | 免费在线观看国产黄 | 91精品国产综合久久福利不卡 | 婷婷六月天在线 | 丁香在线观看完整电影视频 | 91视频免费 | 97操操| 成年人免费在线观看网站 | 日本在线观看一区二区 | 国产亚洲91| 久久99国产精品久久99 | 欧美美女激情18p | 99国产在线观看 | 一级免费黄视频 | 插久久 | www91在线观看 | 日本黄色大片免费看 | 天天爽天天爽天天爽 | 免费激情网 | 久久影院精品 | 日本二区三区在线 | 国产h在线播放 | 日本护士三级少妇三级999 | 日韩久久视频 | 狠狠色丁香婷婷综合久小说久 | 免费av网址大全 | 一区电影 | 亚洲天堂在线观看完整版 | 国产伦精品一区二区三区在线 | 国产精品精品国产 | 欧美看片 | 麻豆国产精品永久免费视频 | 欧美a在线免费观看 | 成年人天堂com | 日本中文乱码卡一卡二新区 | 99综合影院在线 | 久久99精品国产 | 国产精品免费在线观看视频 | 天天玩天天操天天射 | 91av超碰| 国产玖玖在线 | 91大神精品视频在线观看 | 色婷婷伊人 | 丁香婷婷综合激情五月色 | 国产精品18久久久久vr手机版特色 | 精品一二三区视频 | 成人一级黄色片 | 最新99热| 欧美激情精品久久久久久变态 | 中文字幕人成人 | 亚洲黄色av网址 | 亚洲涩涩网 | 欧美激情精品久久久久久免费 | 免费人成在线观看 | 国产 一区二区三区 在线 | 欧美日一级片 | 亚洲最大免费成人网 | 久久99精品国产91久久来源 | 九九九热精品免费视频观看网站 | 久久国产乱| 日韩国产在线观看 | 中文字幕在线高清 | 婷婷色在线 | 97人人超碰在线 | 江苏妇搡bbbb搡bbbb | 五月天久久久久久 | 色亚洲激情 | 日本中文字幕在线一区 | 中文字幕亚洲字幕 | 91麻豆精品一区二区三区 | 在线观看中文字幕亚洲 | 国产一区二区三区免费观看视频 | 久久新| 久久久综合九色合综国产精品 | 国产精品乱码久久久久久1区2区 | 最近最新mv字幕免费观看 | 久久99精品久久久久婷婷 | 亚洲精品久久久久久国 | 最近高清中文在线字幕在线观看 | 日韩免费在线看 | 久久精选 | 久久图| 色福利网 | 69中文字幕 | 超碰在线观看99 | 国产精品美女视频网站 | 五月婷香蕉久色在线看 | 国产精品理论视频 | 天天色棕合合合合合合 | 97免费在线观看视频 | 国产伦理久久精品久久久久_ | 91精品综合在线观看 | 亚洲 欧洲av| 国产黄色片一级三级 | 免费看污污视频的网站 | 日韩午夜精品 | 99久久精品国产系列 | 西西444www大胆高清图片 | 欧美日韩天堂 | 久久免费视频在线观看6 | 亚洲国产精品电影 | 国产99久久久国产精品免费看 | 亚洲国内在线 | 日韩av一区在线观看 | 日日干网 | 在线综合 亚洲 欧美在线视频 | 国产精品久久久久影院日本 | 开心丁香婷婷深爱五月 | 婷婷久久五月天 | 韩国av一区二区三区 | 国产黄色成人av | www.人人干 | 狠狠综合网 | 在线观看一级 | 欧美了一区在线观看 | 亚洲视频第一页 | 日本黄色黄网站 | 成人黄色视 | 国产九九九九九 | 插婷婷 | 一级欧美黄 | 亚洲人人av | 综合色天天 | 免费在线 | 国产精品久久久久四虎 | 国产理论一区二区三区 | 日本精品一 | 99视频在线免费看 | 深夜国产在线 | 天天看天天干天天操 | 欧美一级片在线观看视频 | av中文字幕网 | 又黄又刺激 | 福利片免费看 | 一本色道久久综合亚洲二区三区 | 欧美在线视频日韩 | 国产高清久久久久 | 国产精品久久久久久久久久久久久 | 国产精品成人一区二区三区 | 久久免费一级片 | 激情九九 | 91视频com| 成人在线免费视频观看 | 999久久国产 | 中文字幕免费观看 | 国模一二三区 | 美女久久久久 | av在线观| 亚洲人在线视频 | av成人免费网站 | 亚洲成人资源在线观看 | 日韩三级在线观看 | 久久一区国产 | 亚洲综合色婷婷 | 国产精品久久久久久久久久久久午夜 | 伊人手机在线 | 成人午夜剧场在线观看 | 黄色成人小视频 | 人人爽人人看 | 亚洲精品久久久久久久蜜桃 | 久久国产免费看 | 国产免费观看久久 | 天天干夜夜想 | 国产精品区在线观看 | 亚洲国产成人在线观看 | 91av免费看 | 国产一二区在线观看 | 免费欧美 | 黄色软件在线观看免费 | 欧美日韩精品在线播放 | 久久综合操 | 国产日产精品一区二区三区四区 | 麻豆免费在线视频 | 国内成人精品视频 | se视频网址| 99久久精品午夜一区二区小说 | 亚洲综合导航 | 日韩a在线播放 | 色永久免费视频 | 九草在线观看 | 超碰在线天天 | 深爱激情婷婷网 | 99久久精品国产免费看不卡 | 我要看黄色一级片 | 国产91粉嫩白浆在线观看 | 欧美一区二区精品在线 | 欧美韩日在线 | 在线观看日本韩国电影 | 国产精品一区二区久久久久 | 免费观看性生交 | www.在线观看视频 | 婷婷精品| 久久久久久免费视频 | 超级碰碰视频 | 99久久99久久 | 4438全国亚洲精品观看视频 | 欧美色操 | 狠狠干我 | 91视频免费 | 欧美日韩高清一区二区三区 | 亚洲午夜久久久久久久久久久 | 高清在线观看av | 麻豆精品视频在线 | 国产在线观看99 | 欧美天天综合网 | 亚洲精品国产精品国 | av超碰在线 | 久久久久久久久综合 | 中文字幕在线字幕中文 | 色吧av色av | 国产成人精品在线播放 | 亚洲全部视频 | 伊人精品在线 | 午夜精品久久久久久 | 欧美一区在线看 | 激情综合站 | 五月婷婷天堂 | 国产成人精品亚洲日本在线观看 | 黄色影院在线播放 | 日韩中文字幕免费电影 | 久久婷婷五月综合色丁香 | 日韩欧美国产成人 | 成人小视频免费在线观看 | 国产精品免费看久久久8精臀av | 高清av不卡 | 欧美永久视频 | 精品一区二区免费视频 | 国产69精品久久久久99尤 | 欧美日韩国产页 | 久久这里只有精品1 | 久草www | 久久国产精品免费 | 狠狠操影视 | 狠狠操导航 | 免费高清看电视网站 | 久久久久久久久久久综合 | 成年人毛片在线观看 | 国产精品18久久久久久久久 | 人人爽人人澡人人添人人人人 | 亚洲精品国产第一综合99久久 | 五月天综合网站 | 成人免费毛片aaaaaa片 | 97成人精品 | 91九色成人 | 五月婷婷一级片 | 精品视频97 | 国产专区视频在线观看 | h动漫中文字幕 | 国产精品福利在线播放 | 黄色片网站av | 视频99爱 | 午夜精品av | 久插视频 | 国内精品久久天天躁人人爽 | 91探花国产综合在线精品 | 91福利国产在线观看 | 色综合色综合久久综合频道88 | 久久久免费精品国产一区二区 | 操操操影院 | 91av在线免费观看 | 国产精品成人一区二区三区 | 久久久久99精品国产片 | 国产在线观看地址 | 久久精品99精品国产香蕉 | 天天干天天射天天插 | 草久在线播放 | 91精品一区在线观看 | 欧美一二三四在线 | 国产精品婷婷 | 久久精品日本啪啪涩涩 | 久久久国产日韩 | 欧美人操人 | 国产破处视频在线播放 | 免费色视频网址 | 日本中文字幕在线免费观看 | 国产精品porn| 夜夜视频欧洲 | 亚洲国产欧美一区二区三区丁香婷 | 国产伦理精品一区二区 | 天天色官网 | 免费在线观看一区二区三区 | 免费观看性生活大片 | 91丨九色丨高潮 | 免费黄色小网站 | 亚洲 在线 | 国产精品女同一区二区三区久久夜 | 色婷婷色| 亚洲无吗天堂 | 手机成人在线电影 | 久久精品一级片 | 亚洲第一区在线观看 | 九九视频免费 | 午夜电影一区 | 91九色视频网站 | 日韩av中文在线观看 | 久99久久| 亚洲手机av | 久久精品国产一区 | 97视频免费在线看 | 精品久久久久久久久久久久久久久久久久 | 九九精品视频在线看 | 欧美日韩国内在线 | 欧美精品亚洲精品日韩精品 | 成人av播放 | 久久久影院官网 | 精品一区二区三区久久 | 国产精品久久久久久久久久久久午夜 | 麻豆传媒视频在线免费观看 | 国产麻豆精品95视频 | 欧美视频在线二区 | 精品国产乱码久久久久久1区2匹 | 亚洲高清视频一区二区三区 | 日韩精品一区二区在线视频 | 免费av片在线| 精品久久久国产 | 国产精品一区二区三区免费视频 | 99热.com| 亚洲视频大全 | 黄色av一区二区 | 91在线视频网址 | 久久99精品久久久久蜜臀 | 国产又粗又猛又色又黄视频 | 97网站 | a视频免费在线观看 | 91看片淫黄大片在线播放 | a级国产片| 2024国产在线| 99久高清在线观看视频99精品热在线观看视频 | 在线日韩一区 | 最近中文字幕在线中文高清版 | 国产剧情一区在线 | 在线成人高清电影 | 精品一区电影 | 在线免费视 | 中文视频在线 | 欧美精品乱码久久久久久 | 麻豆视频免费在线 | 依人成人综合网 | 91精品国自产在线偷拍蜜桃 | 人人爽人人舔 | 成人黄色片在线播放 | 中文字幕视频观看 | 久久久久99精品国产片 | 国产一级在线看 | 亚洲专区免费观看 | 国产一区二区高清不卡 | 天天爱天天 | 国内毛片毛片 | 91精品免费视频 | 黄色看片| 中文区中文字幕免费看 | 亚洲黄色av网址 | 色91在线视频 | 奇米网444| 欧美一区二区在线免费观看 | 中文字幕在线观看三区 | 国产一区二区三区高清播放 | 91成人看片 | www.日本色 | 欧美激情片在线观看 | 国产又粗又猛又色又黄视频 | 国产精品久久久久久久7电影 | 9在线观看免费高清完整 | 久要激情网 | av蜜桃在线 | 人人干人人模 | 久久这里只有精品视频首页 | 国产精品一区二区 91 | 国内三级在线 | 中文日韩在线视频 | 天天射天天舔天天干 | 日韩电影在线观看一区二区三区 | 日韩成人高清在线 | 日韩国产欧美在线播放 | 人人狠狠综合久久亚洲 | 99精品国产福利在线观看免费 | 黄色大全视频 | 国产成人三级 | 狠狠操综合 | 日韩av手机在线看 | 中文字幕视频一区 | 五月综合在线观看 | 亚洲欧洲美洲av | 成人小视频在线 | 国产激情电影综合在线看 | 玖玖视频在线 | 久久久黄视频 | 在线视频18在线视频4k | www.夜夜骑.com| 亚洲欧美国内爽妇网 | 国产精品久久久久久久毛片 | 91久久国产露脸精品国产闺蜜 | 午夜色场 | 狠狠地日 | 久久久久国产一区二区三区四区 | 国产黄免费在线观看 | 国产伦理久久精品久久久久_ | 成人黄色电影在线观看 | 中文字幕 成人 | 东方av在线免费观看 | 免费福利视频网站 | 色综合久久88色综合天天人守婷 | 成人久久久电影 | 色亚洲激情 | 五月婷婷开心中文字幕 | 久久精品综合网 | 中文字幕在线观看你懂的 | 在线看日韩av | 伊人资源视频在线 | 精品一二三区 | 成 人 黄 色 视频播放1 | 亚洲精品小视频在线观看 | 国产婷婷视频在线 | 在线成人欧美 | 韩国av一区 | 99视频一区二区 | 日韩高清dvd| 天天鲁天天干天天射 | 狠狠色噜噜狠狠 | 国产一区 在线播放 | 久久免费99精品久久久久久 | a√天堂中文在线 | 国产精品欧美久久久久无广告 | 国产精品女人久久久久久 | 黄色在线观看网站 | 99精品视频免费看 | 国内精品久久久久久久久久 | 91片黄在线观 | 午夜男人影院 | 日韩精品久久中文字幕 | 婷婷久久亚洲 | 亚洲精品视频在 | 国产成人一区二区三区在线观看 | 久99久精品视频免费观看 | 久久综合久色欧美综合狠狠 | 色综合久久久久久久久五月 | 国语精品久久 | 亚洲精品大全 | 国产1区在线观看 | 天天射色综合 | 国产精品一区二区麻豆 | 99 视频 高清 | 中文字幕在线播放一区二区 | 久草在线这里只有精品 | 中文字幕观看视频 | 精品免费一区 | 日韩专区在线播放 | 国产精品大片在线观看 | 久久久久电影网站 | 五月婷婷色丁香 | 日韩高清不卡一区二区三区 | 国产午夜精品av一区二区 | 天天综合色天天综合 | 久久这里只有精品1 | www.综合网.com| 久久综合久久综合这里只有精品 | 天天激情综合 | av线上免费观看 | 国产精品9999 | 97精品国产97久久久久久 | 国产精品九九热 | 探花视频在线版播放免费观看 | 免费视频a | 久av在线| 国产不卡av在线播放 | 色姑娘综合 | www黄免费| 免费观看久久久 | 欧美一级看片 | 亚洲一区美女视频在线观看免费 | 伊人久操 | av免费在线观看网站 | 91精彩视频| 久久精品成人热国产成 | 亚洲国内在线 | 色免费在线 | 五月婷av | 伊人超碰在线 | 国产小视频你懂的在线 | 啪啪免费观看网站 | 日本精品视频在线观看 | 天天草天天干 | 欧美日韩一区二区三区在线免费观看 | 国产免费视频一区二区裸体 | 日本3级在线观看 | 日韩在线视频免费观看 | 国产精品18久久久久久不卡孕妇 | 国产精品久久久久影视 | 亚洲午夜精品在线观看 | 人人玩人人添人人澡97 | 永久免费av在线播放 | 国产成人精品在线播放 | 一级黄色大片 | 91精品国产欧美一区二区成人 | 免费福利片2019潦草影视午夜 | 国内久久精品 | 欧美一区日韩一区 | 肉色欧美久久久久久久免费看 | 亚洲午夜av久久乱码 | 欧美最猛性xxx | 96精品在线| 欧美一级片在线免费观看 | 国产一区福利 | 中文字幕在线第一页 | 91精品视频免费 | 日韩欧美电影在线 | 一区二区三区四区五区六区 | 国产美女精品在线 | 91视频在线自拍 | av免费网页 | 午夜精品导航 | 免费日韩在线 | 欧美黄色成人 | 亚洲国产精品女人久久久 | 亚洲特级毛片 | 欧美日韩一级视频 | 粉嫩av一区二区三区免费 | 精品国产欧美一区二区三区不卡 | 久草视频国产 | 日韩欧美在线视频一区二区 | 91丨九色丨高潮 | 国产精品自产拍在线观看蜜 | 免费日韩一区二区三区 | 在线电影a | 九九亚洲精品 | 国产高清久久久 | 成人91av | 亚洲免费精品一区二区 | 99热在线看| 97视频免费在线 | 国产精品区在线观看 | 婷婷综合亚洲 | 国产麻豆视频免费观看 | 99视频导航| 91在线视频导航 | 久久影视中文字幕 | 亚洲精选99 | 麻豆视频www| 91免费版成人 | 97狠狠干 | 久久人人艹 | 亚洲精品在线免费 | 在线久久| 一区二区三区在线免费播放 | 亚洲激情p | 国产99久久99热这里精品5 | 久久视频在线视频 | 国产精品成人久久 | 国产在线播放一区二区三区 | 国产99久久精品 | 9色在线视频| 亚洲狠狠丁香婷婷综合久久久 | 丁香久久久| 最新av网址大全 | 五月天久久激情 | 亚洲精品国产拍在线 | 天天艹天天干天天 | 日韩手机视频 | 国产亚洲日 | 99精品国产兔费观看久久99 | 91热在线| 天天干夜夜夜操天 | 国内综合精品午夜久久资源 | 高清免费av在线 | 特级西西www44高清大胆图片 | 在线观看一区二区精品 | 丁香婷婷色综合亚洲电影 | 99热精品国产一区二区在线观看 | 日韩精品五月天 | 五月婷婷爱 | 中国一级片在线观看 | 久久精彩 | 99草视频 | 亚洲日本精品视频 | 在线观看视频你懂 | 美女视频a美女大全免费下载蜜臀 | 婷婷综合 | 久久九九久久精品 | 国产精品福利无圣光在线一区 | 国产高清视频在线观看 | 四虎小视频 | 手机成人av| 欧美大香线蕉线伊人久久 | 中文字幕欲求不满 | 天天综合精品 | 久久久久久久久久久久久久av | 98涩涩国产露脸精品国产网 | 亚洲免费观看视频 | 黄视频网站大全 | 国产免费作爱视频 | 午夜久久网 | 中文字幕日本特黄aa毛片 | 亚洲精品乱码久久久久久蜜桃欧美 | 狠狠色伊人亚洲综合成人 | 久热电影 | 亚洲精品日韩一区二区电影 | 中文字幕一区2区3区 | 四虎国产精品免费 | 永久免费视频国产 | 欧美一级片播放 | 国产69精品久久app免费版 | 日韩大陆欧美高清视频区 | 又黄又爽的视频在线观看网站 | 日韩精品大片 | 狠狠躁日日躁狂躁夜夜躁av | 久久精品99久久久久久 | 久久视频这里有久久精品视频11 | 久久成人欧美 | 91九色丨porny丨丰满6 | 久久久久国产免费免费 | 久久久激情视频 | 99精品一区 | 久久香蕉影视 | 国内精自线一二区永久 | 婷婷丁香在线视频 | 91看片淫黄大片在线播放 | 国产 视频 高清 免费 | 超碰电影在线观看 | 日韩毛片久久久 | 在线免费看片 | 久久久影院一区二区三区 | 天天摸天天干天天操天天射 | 天天干,天天干 | 婷婷丁香五 | 成人影片在线免费观看 | 亚洲激情六月 | 在线91av | 99国产情侣在线播放 | 亚洲免费成人av电影 | 美女网站黄在线观看 | 欧美日韩中文视频 | 国产系列在线观看 | av综合网址 | www.狠狠操| 91av在线免费播放 | 91桃色国产在线播放 | 亚洲另类视频 | 成人小视频在线观看免费 | 探花视频在线观看 | 久久精品久久精品久久39 | av成人黄色 | 国产精品欧美精品 | 黄色在线看网站 | 少妇av网 | 国产黄色片久久久 | 天堂av色婷婷一区二区三区 | 中文字幕一区二区三区乱码在线 | 日韩大片免费观看 | 91xav| 久久99精品久久久久久久久久久久 | 亚洲婷婷在线 | 去干成人网 | 国产精品第52页 | 色97在线 | 久久ww| 国产精品初高中精品久久 | 久久影院午夜论 | 日本久久久精品视频 | avwww在线 | 亚洲色五月 | 日韩在线观看视频一区二区三区 | 日韩黄色av网站 | 久久999精品 | 在线观看不卡视频 | 欧美精品一区二区三区一线天视频 | 黄色国产高清 | 五月天天天操 | 黄色片毛片 | 国产福利91精品一区二区三区 | 四虎影视成人永久免费观看亚洲欧美 | 国产精品一区二区av | 国产日韩视频在线 | 日日摸日日添夜夜爽97 | 国产精品美女久久久久久久 | 一级欧美一级日韩 | 美腿丝袜一区二区三区 | 最近中文字幕mv免费高清在线 | 中文在线最新版天堂 | 国产黄色在线看 | 国产日韩精品在线观看 | 一区二区视频播放 | 在线免费观看国产 | 久久av高清 | 国产一级二级三级视频 | 日韩,中文字幕 | 中文字幕免费成人 | 久久久国产精品电影 | 国产高清免费视频 | 久草视频在线免费播放 | 日韩一区正在播放 | 久久久久久久久久久久av | 国产免费久久av |