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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

C++ 笔记(14)— 指针(指针声明、取地址、取值、new/delete、NULL指针、指针运算、指针数组、数组指针、指针传递给函数、从函数返回指针)

發(fā)布時(shí)間:2023/11/27 生活经验 64 豆豆

1. 聲明指針

指針是一個變量,其值為另一個變量的地址,即,內(nèi)存位置的直接地址。就像其他變量或常量一樣,您必須在使用指 針存儲其他變量地址之前,對其進(jìn)行聲明。

指針變量聲明的一般形式為:

type *var-name;
  • type 是指針的基類型,它必須是一個有效的 C++ 數(shù)據(jù)類型;
  • var-name 是指針變量的名稱。用來聲明指針的星號 * 與乘法中使用的星號是相同的。但是,在這個語句中,星號是用來指定一個變量是指針。

以下是有效的指針聲明:

int    *ip;    /* 一個整型的指針 */
double *dp;    /* 一個 double 型的指針 */
float  *fp;    /* 一個浮點(diǎn)型的指針 */
char   *ch;    /* 一個字符型的指針 */

與大多數(shù)變量一樣,除非對指針進(jìn)行初始化,否則它包含的值將是隨機(jī)的。您不希望訪問隨機(jī)的內(nèi)存地址,因此將指針初始化為 NULLNULL 是一個可以檢查的值,且不會是內(nèi)存地址:

int *ip = NULL;

未初始化的指針可能導(dǎo)致程序訪問非法內(nèi)存單元,進(jìn)而導(dǎo)致程序崩潰。

2. 獲取變量地址 &

2.1 & 作用于普通變量

每一個變量都有一個內(nèi)存位置,每一個內(nèi)存位置都定義了 & 運(yùn)算符訪問的地址,它表示了在內(nèi)存中的一個地址。

#include <iostream>
using namespace std;int main ()
{int  a;char b[10];cout << &a << endl;	// 0x7ffe06ed398ccout << &b << endl;	// 0x7ffe06ed3990return 0;
}

2.1 & 作用于數(shù)組

short int height[10]; //int型的數(shù)組(short int 每個數(shù)據(jù)2字節(jié))
cout <<  "height       "<< height << endl <<  "height+1     "<< height + 1 << endl<<  "&height[0]   " <<  &height[0] << endl<<  "&height+1    "<< &height + 1<< endl<<  "height+9     "<< height+9 << endl<< "height+10    " << height + 10 << endl;

輸出結(jié)果:

height       0x7fffce72dfc0
height+1     0x7fffce72dfc2
&height[0]   0x7fffce72dfc0
&height+1    0x7fffce72dfd4
height+9     0x7fffce72dfd2
height+10    0x7fffce72dfd4
  • 數(shù)組名 height 表示數(shù)組首元素地址;
  • 數(shù)組名 height+1 表示數(shù)組第二個元素地址;
  • &height[0] 表示數(shù)組首個元素的地址,其與 height 是相等的;
  • &height+1 表示先取數(shù)組開始的地址,然后再加 1 ,也就是說 c0 + 10*2 ,表示成 16 進(jìn)制為 c0+14=d4;
  • height+9 表示數(shù)組最后一個元素,c0+9*2= c0+12=d2;
  • height+10 表示整個數(shù)組結(jié)束之后的第一個地址,與 &height+1 相等;

3. 使用指針存儲地址

知道如何聲明指針以及如何獲取變量的地址,還知道指針是用于存儲內(nèi)存地址的變量。現(xiàn)在將它們聯(lián)系起來,使用指針來存儲用 & 獲取的地址。

#include <iostream>
using namespace std;int main ()
{int age = 10;int *page = &age;cout << "age address is " << &age << endl;   // 0x7ffc43a7b75ccout << "page is " << page << endl;  // 0x7ffc43a7b75cint dogAge = 3;page = &dogAge;  // 將不同的內(nèi)存地址賦給指針變量,讓它指向不同的值cout << "page is " << page << endl;  // 0x7ffef77b240creturn 0;
}

4. 使用 * 訪問指針指向的數(shù)據(jù)

指針的本質(zhì)是變量,可以是各種數(shù)據(jù)類型,定義一個指針 *ip ,其中 ip 需要賦于一個地址(可以用 & 符號獲取其他變量的地址再賦值給 ip ),而 *ip 是一個具體的值,即讀取地址后獲得的值。

如果有合法的指針 p ,要訪問它包含的地址處存儲的值,可使用 *p

#include <iostream>
using namespace std;int main ()
{int age = 10;int *page = &age;cout << "age address is " << &age << endl;   // 0x7ffc43a7b75ccout << "page is " << page << endl;  // 0x7ffc43a7b75ccout << "page point value is " << *page << endl; // 10int dogAge = 3;page = &dogAge;  // 將不同的內(nèi)存地址賦給指針變量,讓它指向不同的值cout << "page is " << page << endl;  // 0x7ffef77b240ccout << "page point value is " << *page << endl; // 3return 0;
}
  • & 符號的意思是取地址,也就是返回一個對象在內(nèi)存中的地址。
  • * 符號的意思是取得一個指針?biāo)赶虻膶ο蟆?也就是如果一個指針保存著一個內(nèi)存地址,那么它就返回在那個地址的對象。

簡單點(diǎn)就是: & 是取址, * 是取值。

5. sizeof() 用于指針

指針是包含內(nèi)存地址的變量。因此無論指針指向哪種類型的變量(整型、浮點(diǎn)型、字符型,還是其他的數(shù)據(jù)類型),其內(nèi)容都是一個地址(一個代表內(nèi)存地址的長的十六進(jìn)制數(shù))。

在特定的系統(tǒng)中,存儲地址所需的字節(jié)數(shù)是固定的。因此,將 sizeof( ) 用于指針時(shí),結(jié)果取決于編譯程序時(shí)使用的編譯器和針對的操作系統(tǒng),與指針指向的變量類型無關(guān)。

不同數(shù)據(jù)類型的指針之間唯一的不同是,指針?biāo)赶虻淖兞炕虺A康臄?shù)據(jù)類型不同。

#include <iostream>
using namespace std;int main ()
{cout << "sizeof(char) = " << sizeof(char) << endl;cout << "sizeof(int) = " << sizeof(int) << endl;cout << "sizeof(double) = " << sizeof(double) << endl;cout << "sizeof(*char) = " << sizeof(char *) << endl;cout << "sizeof(*int) = " << sizeof(int *) << endl;cout << "sizeof(*double) = " << sizeof(double *) << endl;return 0;
}

輸出結(jié)果:

sizeof(char) = 1
sizeof(int) = 4
sizeof(double) = 8
sizeof(*char) = 8
sizeof(*int) = 8
sizeof(*double) = 8

輸出表明,雖然 sizeof(char) 為 1 字節(jié),而 sizeof(double) 為 8 字節(jié),但 sizeof(char*)sizeof(double*) 都是 8 字節(jié)。這是因?yàn)椴还苤羔樦赶虻膬?nèi)存單元是 1 字節(jié)還是 8 字節(jié),存儲指針?biāo)璧膬?nèi)存量都相同。

備注:使用的是 64 位編譯器,并在 64 位系統(tǒng)上運(yùn)行該程序,可能發(fā)現(xiàn)將 sizeof 用于指針的結(jié)果為 64 位,即 8 字節(jié)。

6. 使用 new 和 delete 動態(tài)地分配和釋放內(nèi)存

使用 new 來分配新的內(nèi)存塊。通常情況下,如果成功, new 將返回指向一個指針,指向分配的內(nèi)存,否則將引發(fā)異常。使用 new 時(shí),需要指定要為哪種數(shù)據(jù)類型分配內(nèi)存:

Type* Pointer = new Type;

需要為多個元素分配內(nèi)存時(shí),還可指定要為多少個元素分配內(nèi)存:

Type* Pointer = new Type[numElements];

因此,如果需要給整型分配內(nèi)存,可使用如下語法:

int* pointToAnInt = new int; 
int* pointToNums = new int[10];

使用 new 分配的內(nèi)存最終都需使用對應(yīng)的 delete 進(jìn)行釋放:

Type* Pointer = new Type; 
delete Pointer;

這種規(guī)則也適用于為多個元素分配的內(nèi)存:

Type* Pointer = new Type[numElements]; 
delete[] Pointer; 

注意:

  • 對于使用 new[…] 分配的內(nèi)存塊,需要使用 delete[] 來釋放;對于使用 new 為單個元素分配的內(nèi)存,需要使用 delete 來釋放。
  • 不能將運(yùn)算符 delete 用于任何包含地址的指針,而只能用于 new 返回的且未使用 delete 釋放的指針。
#include <iostream>
using namespace std;int main ()
{int *a = new int;*a = 10;cout << "a is " << a << " *a is " << *a << endl;int *b = new int[10];cout << "b is " << b << " *b is " << *b << endl;delete a;delete[] b;return 0;
}

7. 未初始化指針、NULL 指針

聲明一個指針變量并不會自動分配任何內(nèi)存。在對指針執(zhí)行間接訪問前 , 指針必須進(jìn)行初始化、或者使它指向現(xiàn)有的內(nèi)存、或者給它分配動態(tài)內(nèi)存。

對未初始化的指針變量執(zhí)行間接訪問操作是非法的,而且這種錯誤常常難以檢測。其結(jié)果常常是一個不相關(guān)的值被修改。這種錯誤是很難被調(diào)試發(fā)現(xiàn)的。

7.1 未初始化指針

下面這個代碼段說明了一個極為常見的錯誤 :

int main() 
{int *a;*a = 10;cout << *a << endl;return 0;
}

這個聲明創(chuàng)建了一個名叫 a 的指針變量 , 后面那條賦值語句把 12 存儲在 a 所指向的內(nèi)存位置 。但是究竟 a 指向哪里呢 ? 我們聲明了這個變量 , 但從未對它進(jìn)行初始化, 所以我們沒有辦法預(yù)測 12 這個值將存儲于什么地方 。

聲明一個指向整型的指針不會 “ 創(chuàng)建 ” 用于存儲整型值的內(nèi)存空間 。

所以 , 如果程序執(zhí)行這個賦值操作 , 會發(fā)生什么情況呢 ? 如果你運(yùn)氣好, a 的初始值會是個非法地址 , 這樣賦值語句將會出錯 , 從而終止程序 。 在 UNIX 系統(tǒng)上 , 這個錯誤被稱為 “ 段違例( Segmentation fault (core dumped) ) ” 或 “ 內(nèi)存錯誤 ( memory fault ) ” 。 它提示程序試圖訪問一個并未分配給程序的內(nèi)存位置 。

所以,在你對指針進(jìn)行間接訪問之前,必須非常小心,確保它們已被初始化 !

7.2 NULL指針

標(biāo)準(zhǔn)定義了 NULL 指針,它作為一個特殊的指針變量 ,表示不指向任何東西。要使一個指針變量為 NULL , 你可以給它賦一個零值 。 為了測試一個指針變量是否為 NULL ,你可以將它與零值進(jìn)行比較。

之所以選擇零這個值是因?yàn)橐环N源代碼約定 。 就機(jī)器內(nèi)部而言 ,NULL 指針的實(shí)際值可能與此不同 。在這種情況下 ,編譯器將負(fù)責(zé)零值和內(nèi)部值之間的翻譯轉(zhuǎn)換 。

在變量聲明的時(shí)候,如果沒有確切的地址可以賦值,為指針變量賦一個 NULL 值是一個良好的編程習(xí)慣。賦為 NULL 值的指針被稱為空指針。

在大多數(shù)的操作系統(tǒng)上,程序不允許訪問地址為 0 的內(nèi)存,因?yàn)樵搩?nèi)存是操作系統(tǒng)保留的。然而,內(nèi)存地址 0 有特別重要的意義,它表明該指針不指向一個可訪問的內(nèi)存位置。

通過一個指針訪問它所指向的地址的過程稱為間接訪問 (indirection) 或解引用指針 (dereferencing
thepointer) 。 這個用于執(zhí)行間接訪問的操作符是單目操作符 *

對指針進(jìn)行解引用操作可以獲得它所指向的值。但從定義上看, NULL 指針并未指向任何東西。因此,對一個 NULL 指針進(jìn)行解引用操作是非法的。在對指針進(jìn)行解引用操作之前,你首先必須確保它并非 NULL 指針 。

int main() 
{int *a = NULL;cout << *a << endl;return 0;
}

程序會報(bào)錯:Segmentation fault (core dumped)

NULL 指針是一個定義在標(biāo)準(zhǔn)庫中的值為零的常量。請看下面的程序:

#include <iostream>
using namespace std;int main ()
{int *a = NULL;cout << " a is " << a << endl; //  a is 0return 0;
}

內(nèi)存地址 0 有特別重要的意義,它表明該指針不指向一個可訪問的內(nèi)存位置。但按照慣例,如果指針包含空值(零值),則假定它不指向任何東西。

如需檢查一個空指針,可以使用 if 語句,如下所示:

if(ptr)     /* 如果 ptr 非空,則完成 */
if(!ptr)    /* 如果 ptr 為空,則完成 */

NULL 指針就是不指向任何東西的指針。它可以賦值給一個指針,用于表示那個指針并不指向任何值 。 對 NULL 指針執(zhí)行間接訪問操作的后果因編譯器而異,兩個常見的后果分別是返回內(nèi)存位置零的值以及終止程序 。

8. 指針運(yùn)算

有效的指針運(yùn)算包括

  • 相同類型指針之間的賦值運(yùn)算 ;
  • 指針同整數(shù)之間的加法或減法運(yùn)算 ;
  • 指向相同數(shù)組中元素的兩個指針間的減法或比較運(yùn)算 ;
  • 將指針賦值為 0 或指針與 0 之間的比較運(yùn)算 。

其他所有形式的指針運(yùn)算都是非法的 , 例如

  • 兩個指針間的加法 、 乘法 、除法 、 移位或屏蔽運(yùn)算 ;
  • 指針同 floatdouble 類型之間的加法運(yùn)算 ;
  • 不經(jīng)強(qiáng)制類型轉(zhuǎn)換而直接將指向一種類型對象的指針賦值給指向另一種類型對象的指針的運(yùn)算 ( 兩個指針之一是 void* 類型的情況除外 )。

可以對指針執(zhí)行算術(shù)運(yùn)算。可以對指針進(jìn)行四種算術(shù)運(yùn)算: ++--+-
假設(shè) ptr 是一個指向地址 1000 的整型指針,是一個 32 位的整數(shù),對該指針執(zhí)行下列的算術(shù)運(yùn)算:

ptr++

在執(zhí)行完上述的運(yùn)算之后, ptr 將指向位置 1004,因?yàn)?ptr 每增加一次,它都將指向下一個整數(shù)位置,即當(dāng)前位置往后移 4 個字節(jié)。這個運(yùn)算會在不影響內(nèi)存位置中實(shí)際值的情況下,移動指針到下一個內(nèi)存位置。

如果 ptr 指向一個地址為 1000 的字符,上面的運(yùn)算會導(dǎo)致指針指向位置 1001,因?yàn)橄乱粋€字符位置是在 1001。

在指針值上可以執(zhí)行一些有限的算術(shù)運(yùn)算。你可以把一個整型值加到一個指針上,也可以從一個指針減去一個整型值 。在這兩種情況下 ,這個整型值會進(jìn)行調(diào)整,原值將乘以指針目標(biāo)類型的長度 。這樣,對一個指針加 1 將使它指向下一個變量 , 至于該變量在內(nèi)存中占兒個字節(jié)的大小則與此無關(guān)。

8.1 指針 ++ 和指針 - -

我們喜歡在程序中使用指針代替數(shù)組,因?yàn)樽兞恐羔樋梢赃f增,而數(shù)組不能遞增,因?yàn)閿?shù)組是一個常量指針。

#include <iostream>
using namespace std;int main ()
{int a[3] = {1,2,3};int *p = a;for(int i=0; i<3; i++){cout << " *p " << *p << endl; p++;}cout << "#################" << endl;int *q = &a[2];for(int i=2; i>=0; i--){cout << " *q " << *q << endl; q--;}return 0;
}

輸出結(jié)果:

 *p 1*p 2*p 3
#################*q 3*q 2*q 1

8.2 指針比較

指針可以用關(guān)系運(yùn)算符進(jìn)行比較,如 ==<> 。如果 p1p2 指向兩個相關(guān)的變量,比如同一個數(shù)組中的不同元素,則可對 p1p2 進(jìn)行大小比較。

#include <iostream>
using namespace std;int main ()
{int a[3] = {1,2,3};int *p = a;int *q = &a[2];while (p<=q){if (p==q){cout << "p==q: *p is " << *p << " *q is " << *q << endl;}if (p<q){cout << "p<q: *p is " << *p << " *q is " << *q << endl;}if (p>q){cout << "p>q: *p is " << *p << " *q is " << *q << endl;}p++;q--;}return 0;
}

輸出:

p<q: *p is 1 *q is 3
p==q: *p is 2 *q is 2

然而 , 指針運(yùn)算只有作用于數(shù)組中其結(jié)果才是可以預(yù)測的。對任何并非指向數(shù)組元素的指針執(zhí)行算術(shù)運(yùn)算是非法的 ( 但常常很難被檢測到 )。 如果一個指針減去一個整數(shù)后,運(yùn)算結(jié)果產(chǎn)生的指針?biāo)赶虻奈恢迷跀?shù)組第一個元素之前 , 那么它也是非法的。加法運(yùn)算稍有不同, 如果結(jié)果指針指向數(shù)組最后一個元素后面的那個內(nèi)存位置仍是合法 ( 但不能對這個指針執(zhí)行間接訪問操作 ) , 不過再往后就不合法了。

如果兩個指針都指向同一個數(shù)組中的元素 , 那么它們之間可以相減 。 指針減法的結(jié)果經(jīng)過調(diào)整( 除以數(shù)組元素類型的長度 ), 表示兩個指針在數(shù)組中相隔多少個元素。如果兩個指針并不是指向同一個數(shù)組的元素,那么它們之間進(jìn)行相減就是錯誤的 。

任何指針之間都可以進(jìn)行比較, 測試它們相等或不相等 。如果兩個指針都指向同一個數(shù)組中的元素,那么它們之間還可以執(zhí)行 << =>> = 等關(guān)系運(yùn)算 ,用于判斷它們在數(shù)組中的相對位置。 對兩個不相關(guān)的指針執(zhí)行關(guān)系運(yùn)算,其結(jié)果是未定義的 。

警告總結(jié):

  • 錯誤地對一個未初始化的指針變量進(jìn)行解引用。
  • 錯誤地對一個 NULL 指針進(jìn)行解引用 。
  • 向函數(shù)錯誤地傳遞 NULL 指針。
  • 未檢測到指針表達(dá)式的錯誤,從而導(dǎo)致不可預(yù)料的結(jié)果 。
  • 對一個指針進(jìn)行減法運(yùn)算,使它非法地指向了數(shù)組第 1 個元素的前面的內(nèi)存位置。

如果指針并不指向任何有意義的東西 ,就把它設(shè)置為 NULL

9. 指針作用于數(shù)組

聲明

int a[10];

定義了一個長度為 10 的數(shù)組 a 。換句話說,它定義了一個由 10 個對象組成的集合,這 10 個對象
存儲在相鄰的內(nèi)存區(qū)域中,名字分別為a[0] 、a[1] 、… a[9] 。

a[i] 表示該數(shù)組的第 i 個元素。如果 pa 的聲明為

int *pa;

則說明它是一個指向整型對象的指針,那么,賦值語句

pa = &a[0];

則可以將指針 pa 指向數(shù)組 a 的第 0 個元素, 也就是說,pa 的值為數(shù)組元素 a[0] 的地址。

這樣,賦值語句

x = *pa;

將把數(shù)組元素 a[0] 中的內(nèi)容復(fù)制到變量 x 中。

如果 pa 指向數(shù)組中的某個特定元素,那么,根據(jù)指針運(yùn)算的定義,pa+1 將指向下一個元素,pa+i 將指向 pa 所指向數(shù)組元素之后的第 i 個元索,而 pa-i 將指向 pa 所指向數(shù)組元素之前的第 i 個元素。因此,如果指針 pa 指向 a[0] , 那么 *( pa+i) 引用的是數(shù)組元素 a[i] 的內(nèi)容,pa+i 是數(shù)組元素 a[i] 的地址,*(pa+i) 引用的是數(shù)組元素 a[i] 的內(nèi)容。


無論數(shù)組 a 中元素的類型或數(shù)組長度是什么,上面的結(jié)論都成立。“指針加1”就意味著,pa+1 指向 pa 所指向的對象的下一個對象。相應(yīng)地,pa+i 指向 pa 所指向的對象之后的第 i 個對象。

下標(biāo)和指針運(yùn)算之間具有密切的對應(yīng)關(guān)系。根據(jù)定義,數(shù)組類型的變量或表達(dá)式的值是該數(shù)組第 0 個元素的地址。執(zhí)行賦值語

pa = &a[0];

后,paa 具有相同的值。因?yàn)閿?shù)組名所代表的就是該數(shù)組最開始的一個元素的地址,所以,
賦值語句 pa=&a[0] 也可以寫成下列形式:

pa = a;

對數(shù)組元素 a[i] 的引用也可以寫成 *( a+i) 這種形式。對第一次接觸這種寫法的人來說,可能會覺得很奇怪。在計(jì)算數(shù)組元素 a[i] 的值時(shí),C++ 語言實(shí)際上先將其轉(zhuǎn)換為 *( a+i) 的形式,然后再進(jìn)行求值,因此在程序中這兩種形式是等價(jià)的。

如果對這兩種等價(jià)的表示形式分別施加地址運(yùn)算符 & , 便可以得出這樣的結(jié)論:&a[i]a+i 的含義也是相同的。a+ia 之后第 i 個元素的地址。相應(yīng)地,如果 pa 是一個指針,那么,在表達(dá)式中也可以在它的后面加下標(biāo) pa[i]*(pa+i) 是等價(jià)的。簡而言之,一個通過數(shù)組和下標(biāo)實(shí)現(xiàn)的表達(dá)式可等價(jià)地通過指針和偏移量實(shí)現(xiàn)。

但是,我們必須記住,數(shù)組名和指針之間有一個不同之處。指針是一個變量,因此,在 C/C++ 語言中,語句 pa=apa++ 都是合法的。但數(shù)組名不是變量,因此,類似于 a=paa++ 形式的語句是非法的。

當(dāng)把數(shù)組名傳遞給一個函數(shù)時(shí),實(shí)際上傳遞的是該數(shù)組第一個元素的地址。在被調(diào)用函數(shù)中,該參數(shù)是一個局部變量,因此,數(shù)組名參數(shù)必須是一個指針,也就是一個存儲地址值的變量。我們可以利用該特性編寫strlen 函數(shù)的另一個版本,該函數(shù)用于計(jì)算一個字符串的長度。

int strlen(char *s)
{for(int n=0; *s != '\0'; s++){n++;}return n;
}

因?yàn)?s 是一個指針,所以對其執(zhí)行自增運(yùn)算是合法的。執(zhí)行 s++ 運(yùn)算不會影響到 strlen 函數(shù)的調(diào)用者中的字符串, 它僅對該指針在 strlen 函數(shù)中的私有副本進(jìn)行自增運(yùn)算。因此,類似于下面這樣的函數(shù)調(diào)用:

strlen("hello, world"); 	/*字符串常量*/
strlen(array);				/*字符數(shù)組array有100個元素*/
strlen(ptr);				/* Ptr是一個指向char *類型對象的指針 */

都可以正確地執(zhí)行。

在函數(shù)定義中,形式參數(shù)

char s[];

char *s;

是等價(jià)的。我們通常更習(xí)慣于使用后一種形式, 因?yàn)樗惹罢吒庇^地表明了該參數(shù)是一個指針。

指針和數(shù)組是密切相關(guān)的。事實(shí)上,指針和數(shù)組在很多情況下是可以互換的。例如,一個指向數(shù)組開頭的指針,可以通過使用指針的算術(shù)運(yùn)算或數(shù)組索引來訪問數(shù)組。

#include <iostream>
using namespace std;int main ()
{int var[3] = {10,100,200};int *p=var;for (int i = 0; i < 3; i++){//cout << *(var++) << endl;    //編譯錯誤,因?yàn)関ar是數(shù)組名(也是數(shù)組首元素地址),不是一個變量,不可修改其值cout << *(var+i) << endl; //編譯正確,因?yàn)闆]有對var進(jìn)行賦值,只是通過與i相加訪問變量地址cout<<  *(p++)<<endl;        ///編譯正確,p為指針變量可賦值}return 0;
}

輸出結(jié)果:

10
10
100
100
200
200

把指針運(yùn)算符 * 應(yīng)用到 var 上是完全可以的,但修改 var 的值是非法的。這是因?yàn)?var 是一個指向數(shù)組開頭的常量,不能作為左值。

由于一個數(shù)組名對應(yīng)一個指針常量,只要不改變數(shù)組的值,仍然可以用指針形式的表達(dá)式。例如,下面是一個有效的語句,把 var[2] 賦值為 500:

*(var + 2) = 500;

10. 指針數(shù)組

可能有一種情況,我們想要讓數(shù)組存儲指向 intchar 或其他數(shù)據(jù)類型的指針。下面是一個指向整數(shù)的指針數(shù)組的聲明:

int *ptr[MAX];

在這里,把 ptr 聲明為一個數(shù)組,由 MAX 個整數(shù)指針組成。因此, ptr 中的每個元素,都是一個指向 int 值的指針。

char *names[MAX] 是指針數(shù)組,它的本質(zhì)是存儲指針的數(shù)組,即存儲 char 類型的指針的數(shù)組,數(shù)組內(nèi)的每個元素都是一個指針,并且指向一個存儲 char 類型的地址。

下面的實(shí)例用到了三個整數(shù),它們將存儲在一個指針數(shù)組中,如下所示

#include <iostream>using namespace std;
const int MAX = 3;int main ()
{int  var[MAX] = {10, 100, 200};int *ptr[MAX];for (int i = 0; i < MAX; i++){ptr[i] = &var[i]; // 賦值為整數(shù)的地址}for (int i = 0; i < MAX; i++){cout << "Value of var[" << i << "] = ";cout << *ptr[i] << endl;}return 0;
}

輸出結(jié)果:

Value of var[0] = 10
Value of var[1] = 100
Value of var[2] = 200

詳解指針數(shù)組的結(jié)合過程:

int *ptr[3];

由于 C++ 運(yùn)算符的優(yōu)先級中, * 小于 [] ,所以 ptr 先和 [] 結(jié)合成為數(shù)組,然后再和 int * 結(jié)合形成數(shù)組的元素類型是 int * 類型,得到一個叫一個數(shù)組的元素是指針,簡稱指針數(shù)組。
這相當(dāng)于聲明了一個數(shù)組 , 該數(shù)組有 3 個元素,其中每個元素都是一個指向整型對象的指針。

int *(ptr[3]);

這個和上面的一樣,優(yōu)先級順序是 * 小于 ()() 等于 []ptr 先和 [] 結(jié)合成為數(shù)組,然后再和 int * 結(jié)合形成數(shù)組的元素類型是 int * 類型,得到一個叫一個數(shù)組的元素是指針,簡稱指針數(shù)組。

11. 數(shù)組指針

int (*ptr)[3];

這個就不一樣了,優(yōu)先級順序是 * 小于 ()() 等于 []()[] 的優(yōu)先級一樣,但是結(jié)合順序是從左到右,所以先是 () 里的 *ptr 結(jié)合成為一個指針,然后是 (*ptr)[] 相結(jié)合成為一個數(shù)組,最后叫一個指針 ptr 指向一個數(shù)組,簡稱數(shù)組指針。

12. 指向指針的指針

指向指針的指針是一種多級間接尋址的形式,或者說是一個指針鏈。通常,一個指針包含一個變量的地址。當(dāng)我們定義一個指向指針的指針時(shí),第一個指針包含了第二個指針的地址,第二個指針指向包含實(shí)際值的位置。

一個指向指針的指針變量必須如下聲明,即在變量名前放置兩個星號。例如,下面聲明了一個指向 int 類型指針的指針:

int **var;

當(dāng)一個目標(biāo)值被一個指針間接指向到另一個指針時(shí),訪問這個值需要使用兩個星號運(yùn)算符,如下面實(shí)例所示:

#include <iostream>
using namespace std;int main ()
{int  var;int  *ptr;int  **pptr;var = 3000;// 獲取 var 的地址ptr = &var;// 使用運(yùn)算符 & 獲取 ptr 的地址pptr = &ptr;// 使用 pptr 獲取值cout << "var 值為 :" << var << endl;cout << "*ptr 值為:" << *ptr << endl;cout << "**pptr 值為:" << **pptr << endl;return 0;
}

輸出結(jié)果:

var 值為 :3000
*ptr 值為:3000
**pptr 值為:3000

13. 傳遞指針給函數(shù)

C++ 允許您傳遞指針給函數(shù),只需要簡單地聲明函數(shù)參數(shù)為指針類型即可。

#include <iostream>
using namespace std;int get(int *p);int main ()
{int a = 1;cout << "a 值為 :" << a << endl;cout << "&a = " << &a << endl;get(&a);cout << "a 值為 :" << a << endl; return 0;
}int get(int *p)
{cout << "p = " << p << endl;*p = 10;return *p;
}

輸出結(jié)果:

a 值為 :1
&a = 0x7ffcb10db964
p = 0x7ffcb10db964
a 值為 :10

14. 從函數(shù)返回指針

C++ 允許從函數(shù)返回指針。為了做到這點(diǎn),必須聲明一個返回指針的函數(shù),如下所示:

int * func();

另外,C++ 不支持在函數(shù)外返回局部變量的地址,除非定義局部變量為 static 變量。

#include <iostream>
using namespace std;int * get();int main ()
{int * ret=NULL;ret = get();for(int i=0; i<3; i++){   cout << "&ret is " << ret << endl;cout << "i is " << i << " value is " << *ret << endl;ret++;}return 0;
}int * get()
{static int a[3] = {1,2,3};return a;
}

輸出結(jié)果:

&ret is 0x601070
i is 0 value is 1
&ret is 0x601074
i is 1 value is 2
&ret is 0x601078
i is 2 value is 3

15 const 用于指針

通過將變量聲明為 const 的,可確保變量的取值在整個生命周期內(nèi)都固定為初始值。這種變量的值不能修改,因此不能將其用作左值。

指針也是變量,因此也可將關(guān)鍵字 const 用于指針。然而,指針是特殊的變量,包含內(nèi)存地址,還可用于修改內(nèi)存中的數(shù)據(jù)塊。因此, const 指針有如下三種。

  • 指針包含的地址是常量,不能修改,但可修改指針指向的數(shù)據(jù):
int daysInMonth = 30;
int* const pDaysInMonth = &daysInMonth;
*pDaysInMonth = 31; // OK! Data pointed to can be changed
int daysInLunarMonth = 28;
pDaysInMonth = &daysInLunarMonth; // Not OK! Cannot change address!
  • 指針指向的數(shù)據(jù)為常量,不能修改,但可以修改指針包含的地址,即指針可以指向其他地方:
int hoursInDay = 24;
const int* pointsToInt = &hoursInDay;
int monthsInYear = 12;
pointsToInt = &monthsInYear; // OK!
*pointsToInt = 13; // Not OK! Cannot change data being pointed to
int* newPointer = pointsToInt; // Not OK! Cannot assign const to non-const
  • 指針包含的地址以及它指向的值都是常量,不能修改(這種組合最嚴(yán)格):
int hoursInDay = 24;
const int* const pHoursInDay = &hoursInDay;
*pHoursInDay = 25; // Not OK! Cannot change data being pointed to
int daysInMonth = 30;
pHoursInDay = &daysInMonth; // Not OK! Cannot change address

將指針傳遞給函數(shù)時(shí),這些形式的 const 很有用。函數(shù)參數(shù)應(yīng)聲明為最嚴(yán)格的 const 指針,以確保函數(shù)不會修改指針指向的值。這可禁止程序員修改指針及其指向的數(shù)據(jù)。

16. 指針常見錯誤

C++沒有自動垃圾收集器對程序已分配但不能使用的內(nèi)存進(jìn)行清理。使用指針來管理內(nèi)存資源時(shí),程序員很容易犯錯。

16.1 內(nèi)存泄露

這可能是C++應(yīng)用程序最常見的問題之一:運(yùn)行時(shí)間越長,占用的內(nèi)存越多,系統(tǒng)越慢。如果在使用 new 動態(tài)分配的內(nèi)存不再需要后,程序員沒有使用配套的 delete 釋放,通常就會出現(xiàn)這種情況。

確保應(yīng)用程序釋放其分配的所有內(nèi)存是程序員的職責(zé)。絕不能讓下面這樣的情形發(fā)生:

int* a = new int[5]; // initial allocation
// use a
...
// forget to release using delete[] a;
...
// make another allocation and overwrite
a = new int[10]; // leaks the previously allocated memory

16.2 指針指向無效的內(nèi)存單元

使用運(yùn)算符 * 對指針解除引用,以訪問指向的值時(shí),務(wù)必確保指針指向了有效的內(nèi)存單元,否則程序要么崩潰,要么行為不端。這看起來合乎邏輯,但一個非常常見的導(dǎo)致應(yīng)用程序崩潰的原因就是無效指針。

16.3 懸浮指針(也叫迷途或失控指針)

使用 delete 釋放后,任何有效指針都將無效。為了避免再次使用已經(jīng) delete 的指針,很多程序員在初始化指針或釋放指針后將其設(shè)置為 NULL ,并在使用運(yùn)算符 * 對指針解除引用前檢查它是否有效(將其與 NULL 比較)。

#include <iostream>
using namespace std;int main ()
{int *a = NULL;cout <<a << endl;	// 0if(a){cout <<"valid" << endl;}else{cout <<"invalid" << endl;	// invalid}return 0;
}

參考:
https://www.runoob.com/w3cnote/c-constant-pointer.html

總結(jié)

以上是生活随笔為你收集整理的C++ 笔记(14)— 指针(指针声明、取地址、取值、new/delete、NULL指针、指针运算、指针数组、数组指针、指针传递给函数、从函数返回指针)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

欧美精品久久久久久久久久丰满 | 97视频资源 | 中文字幕在线视频免费播放 | 日韩欧美在线影院 | 精品在线你懂的 | 国产三级香港三韩国三级 | 探花视频免费观看高清视频 | 超碰在线98 | 狠狠干天天 | 日韩中文在线电影 | 午夜精品久久久久久久99 | 91精品黄色 | 欧美最新大片在线看 | 国产视频欧美视频 | 丁香网五月天 | 日韩在线一级 | 国产美女视频免费 | 午夜av在线电影 | 激情在线网| 精品久久久久久久久久久久久久久久 | 国产在线观看不卡 | 丁香激情综合久久伊人久久 | 日韩成年视频 | 国产二区视频在线观看 | 国产精品s色 | aaawww| 国产免费黄色 | 免费日韩视 | 午夜三级影院 | 91九色视频在线播放 | 日韩一二三在线 | 国内精品在线观看视频 | 久久福利电影 | 亚州性色 | 狠狠色丁香婷婷 | 精品一区av | 一区二区三区高清在线 | 91香蕉视频在线 | 中文字幕在线观看亚洲 | 精品久久久久免费极品大片 | 最新成人在线 | 99视频在线免费看 | 精选久久 | 国产精品自产拍 | 丰满少妇在线观看 | 免费视频三区 | 精品视频网站 | 亚色视频在线观看 | 国产黄免费在线观看 | 99久久电影 | 91亚洲国产成人 | 日韩精品在线视频免费观看 | 97久久久免费福利网址 | 美女国产网站 | 欧美三级在线播放 | 国产特级毛片aaaaaa | 成人精品福利 | 日韩欧美99 | 五月天久久精品 | 天天干天天在线 | 欧美成人猛片 | 日韩av中文在线观看 | 91网站观看 | 蜜臀aⅴ国产精品久久久国产 | 少妇搡bbbb搡bbb搡忠贞 | 久爱精品在线 | 国产特级毛片 | 超碰在线98 | 成人黄色小说在线观看 | 国产在线污 | 欧美激情操 | 国产女人18毛片水真多18精品 | 欧洲亚洲国产视频 | 免费日韩视频 | 狠狠狠色丁香综合久久天下网 | 日韩欧美视频一区二区 | 极品中文字幕 | 欧美嫩草影院 | 国产精品久久久久久爽爽爽 | 极品美女被弄高潮视频网站 | 亚洲 在线 | 国产精品九九九九九九 | av中文在线播放 | 一区二区不卡视频在线观看 | 中文字幕免费一区 | 国产打女人屁股调教97 | 久久理论影院 | 天天爽天天爽夜夜爽 | 国产精品二区在线观看 | av中文字幕网站 | 国产精品video| 91亚洲精品在线 | 日本久久久久久久久久久 | 黄色在线免费观看网站 | 成人网页在线免费观看 | 在线观看视频国产 | 高清久久久久久 | 日韩av免费一区 | 在线免费观看麻豆视频 | 另类五月激情 | 久久婷亚洲五月一区天天躁 | 亚洲欧美色婷婷 | 国产二区电影 | 91资源在线观看 | 精品国产伦一区二区三区免费 | 五月婷婷在线观看视频 | 日韩av片在线 | 99久久精| 国产日本亚洲高清 | 久久午夜免费观看 | 尤物97国产精品久久精品国产 | 久二影院 | 免费在线观看av网站 | 色偷偷88888欧美精品久久 | 国产精品永久免费视频 | 久久久久久电影 | 99精品网站 | 欧美日韩一区二区三区在线观看视频 | 久久少妇 | 日韩国产精品一区 | 波多野结衣在线播放一区 | 成人免费视频免费观看 | 一区二区视频在线观看免费 | 亚洲狠狠操 | 日韩精品一区二区三区视频播放 | 成人欧美日韩国产 | 在线观看av免费 | 精品主播网红福利资源观看 | 国产女做a爱免费视频 | 97在线精品视频 | 亚洲综合丁香 | 91大神精品视频在线观看 | 欧美va日韩va| 激情五月色播五月 | 三级小视频在线观看 | 西西www4444大胆视频 | 国产免费观看高清完整版 | 国产高清视频网 | 日本午夜在线亚洲.国产 | 免费成人av | 免费看污的网站 | 992tv人人草 黄色国产区 | 国产不卡在线观看 | 精品国产一区二区三区在线 | 免费在线成人av电影 | 九九九九九国产 | 99久久精 | 996久久国产精品线观看 | 久草视频国产 | 91精品国产91久久久久久三级 | 视频国产在线 | 久久99国产精品视频 | 久久免费毛片视频 | 欧美日韩中文字幕在线视频 | 在线成人短视频 | 亚洲va欧洲va国产va不卡 | 中文亚洲欧美日韩 | 人人舔人人射 | 久久久久久不卡 | 91av视屏| 日本xxxx.com | 久久久九九 | 玖草影院 | 91精品办公室少妇高潮对白 | 色婷婷久久久综合中文字幕 | 久久九九国产精品 | 人人澡人人添人人爽一区二区 | 欧美在线视频精品 | 国产精品久久久久久久久久久不卡 | 国产精品一区二区三区免费看 | 午夜黄色大片 | 97操碰| 亚洲一级在线观看 | 就要干b| 欧美成年网站 | 91精品视频免费 | 亚洲免费国产视频 | 天天干,天天操,天天射 | 伊人久久av | 日韩国产精品毛片 | 69国产成人综合久久精品欧美 | 日本久久免费电影 | 黄色福利 | 免费在线一区二区 | 久久久久欧美精品 | 特级黄色一级 | 99精品国产高清在线观看 | av电影免费在线看 | 久久婷婷国产色一区二区三区 | 亚洲激情中文 | 亚洲免费在线视频 | 黄色免费在线视频 | 国产xxxxx在线观看 | 欧美一级日韩三级 | 天天爱综合 | 字幕网资源站中文字幕 | www.69xx | 91丨九色丨勾搭 | 国产尤物在线观看 | 国产v在线 | 久久国产精品免费视频 | 六月婷婷色| 日韩中文在线视频 | 日韩一区二区免费在线观看 | 免费网站在线观看成人 | 亚洲女欲精品久久久久久久18 | 欧美aa一级| 国产精品久久久久久久久久妇女 | 丁香婷婷久久久综合精品国产 | 亚洲综合在线视频 | 国产在线观看免费观看 | 婷婷丁香色综合狠狠色 | 一区二区三区四区精品视频 | 亚洲国产欧洲综合997久久, | 91社区国产高清 | 成人在线免费看 | 亚洲美女视频网 | 亚洲欧美日本一区二区三区 | 99草在线视频 | 欧美精品久久人人躁人人爽 | 亚洲欧洲成人 | 国产成人一区二区啪在线观看 | 久久久高清| 高清视频一区二区三区 | 伊人婷婷久久 | 1000部国产精品成人观看 | 91漂亮少妇露脸在线播放 | 国产免费高清 | 黄网站色欧美视频 | 8x成人免费视频 | 亚洲最大色| 欧美性做爰猛烈叫床潮 | 九九热精品在线 | 国产视频一区二区三区在线 | 国产精品s色 | av丁香花| 国产激情电影综合在线看 | 91av电影 | 中文字幕在线观看第二页 | 99国产精品免费网站 | 天天舔天天射天天操 | 日韩电影在线看 | 婷婷在线免费视频 | 欧美韩国日本在线 | 日韩精品一区二区三区在线播放 | 国产亚洲免费的视频看 | 最近中文字幕视频网 | 久久艹国产视频 | 国产成人av电影在线 | 女人18毛片a级毛片一区二区 | 亚洲天堂网在线播放 | av黄色影院 | 久久久精品在线观看 | 国产视频 久久久 | 久久系列| 午夜黄色影院 | 91精品国自产在线观看欧美 | 久久国产色 | 中国一区二区视频 | 精品视频国产 | 久久9999久久免费精品国产 | 狠狠色丁香婷婷综合久小说久 | 欧美一区二区在线刺激视频 | 在线观看久久久久久 | 国产精品99久久免费观看 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 国产视频1区2区 | 福利一区视频 | 在线观看国产福利片 | 免费的成人av | 人人模人人爽 | 91九色精品 | 91免费看片黄 | 99久久精品免费 | 亚洲电影黄色 | 正在播放五月婷婷狠狠干 | 欧美日韩精品在线免费观看 | 国产香蕉在线 | 久久精品国产亚洲aⅴ | 久久免费视频在线观看6 | 日韩亚洲欧美中文字幕 | 91大神电影 | 亚洲va韩国va欧美va精四季 | 欧美日韩在线播放 | www.黄色在线 | 日本中文字幕系列 | www178ccom视频在线 | 97超碰在线人人 | 久久久久久久18 | 欧美一区成人 | 国产精品网红直播 | 亚洲视频专区在线 | 深爱婷婷久久综合 | 免费在线成人 | 激情视频一区二区三区 | 国内精品久久久久影院一蜜桃 | 成人一区二区三区在线 | 欧美一二三四在线 | 91污污| 99久久99视频只有精品 | 日韩中文字幕电影 | 国产精品一区二区白浆 | 日韩欧美在线观看一区二区 | 久久免费大片 | av中文资源在线 | 成人福利av| 日本精品久久久一区二区三区 | 婷婷丁香七月 | 久久久久福利视频 | 国产精品免费成人 | 人人玩人人爽 | 最近2019好看的中文字幕免费 | 少妇啪啪av入口 | 久久久久免费精品视频 | 欧美一级特黄aaaaaa大片在线观看 | 狠狠色噜噜狠狠 | 毛片3 | 美女久久久久久久久久 | 国产成人精品一区二区三区在线观看 | 三级黄色理论片 | www.黄色片网站 | 一级电影免费在线观看 | 成人国产精品久久久 | 日韩精品久久久久久 | 成人av.com| 九色自拍视频 | 国产偷v国产偷∨精品视频 在线草 | 亚洲婷婷综合色高清在线 | 亚洲国产中文在线观看 | 一级一级一片免费 | 精品一区二区免费在线观看 | 婷婷午夜天 | 欧美污污视频 | 国产男女免费完整视频 | 国产在线观看你懂得 | 成人在线观看日韩 | 97热视频| 国产高清在线视频 | 97在线影视| 中文国产字幕在线观看 | 激情av综合 | 少妇性aaaaaaaaa视频 | 天天综合导航 | 日韩视频一区二区在线观看 | 夜夜夜草 | 久久看免费视频 | 久久99久久99免费视频 | 在线成人免费 | 免费成人av在线 | 午夜av免费在线观看 | 97在线观视频免费观看 | 精品国产伦一区二区三区观看说明 | 波多野结衣一区二区 | 麻豆国产电影 | 999成人 | 欧美日韩国产在线一区 | 亚洲国产经典视频 | 九九导航 | 日韩高清一区 | 久久中文字幕在线视频 | 国产99精品在线观看 | 久久手机免费视频 | 精品国产资源 | 欧美男同视频网站 | 在线观看黄色的网站 | 91免费高清 | 99免费国产 | 成人性生交大片免费看中文网站 | 日本激情中文字幕 | 国产成人a v电影 | 日韩精品一区二区三区免费观看视频 | 国产又黄又爽又猛视频日本 | 国产精品高潮呻吟久久av无 | 亚洲欧美在线视频免费 | av在线播放国产 | 成人免费在线视频观看 | 久久综合狠狠狠色97 | 黄色网免费 | 丁香电影小说免费视频观看 | 日韩一区精品 | 日韩精品久久久久久久电影竹菊 | 97免费视频在线 | 日韩高清免费无专码区 | 91视频高清完整版 | av片子在线观看 | 亚洲理论在线观看 | 日韩免 | 成人av在线影院 | 久久综合偷偷噜噜噜色 | 色婷婷88av视频一二三区 | 国产视频69 | 国产视频色 | 婷婷五月情 | 97人人模人人爽人人少妇 | 中文字幕频道 | 婷婷中文字幕在线观看 | 99精品国产成人一区二区 | 国产高清精| 在线观看不卡视频 | 韩国三级av在线 | av免费看网站 | 中文字幕日韩无 | 91在线观 | 国产精品一区二区三区在线免费观看 | 蜜臀精品久久久久久蜜臀 | 亚洲天天综合网 | 久久男人视频 | 日本最大色倩网站www | 天天摸日日操 | 国产高清成人av | 国产精品久久99综合免费观看尤物 | 精品视频国产 | 亚洲va在线va天堂va偷拍 | 国产精品久久久久久久久毛片 | 五月亚洲 | 午夜黄色一级片 | 最新av电影网站 | 成人国产精品免费观看 | 人人爽久久涩噜噜噜网站 | 国产又粗又猛又爽又黄的视频免费 | 三级黄色大片在线观看 | 国产又粗又猛又色 | 丁香av在线 | 97香蕉视频 | 91精品国产91热久久久做人人 | 欧美日韩三级在线观看 | 免费久久99精品国产 | 97超碰资源总站 | 香蕉91视频| 激情久久伊人 | 欧洲激情综合 | 成人中文字幕在线 | 日日干天天插 | 成人三级网址 | 久久免费黄色 | 亚洲精品在线观看不卡 | 色综合久久99 | 久久久久女人精品毛片 | 亚洲伦理一区二区 | 成人资源在线播放 | 在线看一区| 国产精品免费一区二区 | 国产免费一区二区三区最新 | 国产精品久久久久久欧美 | 在线观看日韩国产 | 成人久久久久久久久 | 香蕉视频最新网址 | 中文字幕丝袜 | 亚洲永久精品在线 | 91色亚洲 | 久久精品成人热国产成 | 亚洲aⅴ一区二区三区 | 天天操天操 | 免费在线观看av的网站 | 国产香蕉97碰碰碰视频在线观看 | 国产伦理剧 | 日韩专区在线播放 | 黄色特一级 | 色噜噜日韩精品一区二区三区视频 | 一区二区三区在线免费观看 | 水蜜桃亚洲一二三四在线 | 午夜久久久久 | 久久久久久久久久久国产精品 | 青青草国产成人99久久 | 国产a级精品 | 免费a网站 | 中国精品少妇 | 精品国产伦一区二区三区免费 | 亚洲综合一区二区精品导航 | 免费观看一级成人毛片 | 精品国产三级a∨在线欧美 免费一级片在线观看 | 最近中文国产在线视频 | 国产一级片免费观看 | 日韩成人看片 | 国产午夜精品一区二区三区在线观看 | 午夜一级免费电影 | 国产一级高清视频 | 免费一级片在线观看 | 国产高清在线不卡 | 日韩在线观看高清 | 国产理论免费 | 欧美91精品| 欧美最猛性xxxxx亚洲精品 | 中文电影网 | 久久久鲁 | 成人免费一区二区三区在线观看 | 国产高清视频色在线www | 日韩一区二区免费播放 | 日本中文字幕系列 | 精品一区二三区 | 在线观看免费国产小视频 | 亚洲欧美视屏 | 91精品国产乱码久久 | 亚洲黄在线观看 | 一区二区视频免费在线观看 | 视频在线观看日韩 | 91综合色 | 亚洲 欧美日韩 国产 中文 | 国产午夜三级一区二区三桃花影视 | 国产精品情侣视频 | 国产美女免费 | 最新av网站在线观看 | 亚洲最大av网站 | 美女黄频视频大全 | 激情婷婷久久 | 深夜福利视频在线观看 | 色在线视频网 | 中文字字幕在线 | 久久精品国亚洲 | 91亚洲视频在线观看 | 国产精品婷婷 | 成人免费视频播放 | 国产伦精品一区二区三区照片91 | 人人狠狠 | 色偷偷男人的天堂av | 天堂av官网| 黄色三级久久 | 国产成人99av超碰超爽 | 中文字幕高清免费日韩视频在线 | 欧美91精品 | 久热香蕉视频 | 91一区啪爱嗯打偷拍欧美 | 国产偷国产偷亚洲清高 | 国产69精品久久app免费版 | 欧美一级黄大片 | 亚洲国产精品一区二区久久,亚洲午夜 | 女人18精品一区二区三区 | 2019天天干夜夜操 | 日本大片免费观看在线 | 6080yy午夜一二三区久久 | 国产精品大尺度 | 中文字幕有码在线 | 成人免费视频网站在线观看 | 亚洲va男人天堂 | 日韩激情第一页 | 国产网站av| 亚洲国内精品在线 | 亚洲成人av在线播放 | 亚洲国产精品日韩 | 亚洲一区二区黄色 | 国产亚洲欧美在线视频 | 亚洲一区二区观看 | 黄色小网站在线观看 | 成人久久免费 | 91自拍视频在线观看 | 国产美女在线精品免费观看 | 欧美一区免费在线观看 | 国产999精品久久久久久 | www色网站 | 在线电影 一区 | 免费av片在线 | 中文字幕在线免费观看 | 好看的国产精品视频 | 久久久人人爽 | 国产成人在线观看 | 精品夜夜嗨av一区二区三区 | 人人精品 | 精品国精品自拍自在线 | 又黄又爽又湿又无遮挡的在线视频 | 国产精品porn | 色婷婷www| 中文字幕日本电影 | 丁香在线观看完整电影视频 | www.成人久久 | 日本婷婷色 | 2023亚洲精品国偷拍自产在线 | 精品中文字幕在线观看 | 国内精品久久天天躁人人爽 | 国产一级高清 | 国产麻豆精品一区二区 | 国产高清久久久 | 婷婷综合五月天 | 久久99国产一区二区三区 | 激情婷婷综合网 | 欧美在线视频免费 | 久久久精品网站 | 色网址99 | 免费观看国产视频 | 国产xxxxx在线观看 | 在线草| 欧美精品一级视频 | 久久99精品久久久久久清纯直播 | 国产日韩中文字幕在线 | 精品91| 国产999精品久久久久久绿帽 | 国产成人综合图片 | 在线视频婷婷 | 中文资源在线观看 | 欧美日本在线视频 | 久久99精品久久久久久久久久久久 | 国产精品久久久久久久久搜平片 | 日本精品一区二区三区在线观看 | 国产午夜一级毛片 | 亚洲激情综合网 | 亚洲在线视频播放 | 日韩城人在线 | 国内毛片毛片 | 亚洲精品国精品久久99热一 | 播五月综合 | av在线精品 | 午夜国产一区二区三区四区 | 亚洲男男gaygayxxxgv | 成人av电影网址 | 国产美女视频 | av免费线看 | 欧美另类交人妖 | 国产精品亚洲综合久久 | www.黄色小说.com | 欧美少妇bbwhd | 免费看在线看www777 | 中文字幕丰满人伦在线 | 中文字幕成人 | 中文在线字幕观看电影 | 色综合久久久久久中文网 | 日韩精品中文字幕一区二区 | 免费视频 你懂的 | 国偷自产视频一区二区久 | 一级黄色大片在线观看 | 日韩久久精品一区二区三区下载 | 中文字幕中文字幕在线一区 | 伊人婷婷色 | 久久久久久国产精品免费 | 国产中出在线观看 | 亚洲乱码在线观看 | 一级黄色片在线免费观看 | 国产精品毛片一区二区在线 | 久久久久国产一区二区 | 欧美男同网站 | 国产一在线精品一区在线观看 | 超碰成人网 | 国内偷拍精品视频 | 成人三级网站在线观看 | 99热精品久久 | 国产一区二区高清 | 91丨九色丨高潮丰满 | 精品久久五月天 | 日韩午夜电影 | 国产看片免费 | 国产精品一区二区在线免费观看 | 精品国产一区二区三区久久久蜜月 | 91成人天堂久久成人 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 西西大胆啪啪 | 99久高清在线观看视频99精品热在线观看视频 | 亚洲精品乱码久久久久久 | 免费观看特级毛片 | 国产精品视频线看 | 亚洲dvd | 97电影手机版 | 久久久九九 | 91免费看黄色 | 日韩激情片在线观看 | 成人免费观看完整版电影 | 99久e精品热线免费 99国产精品久久久久久久久久 | 成年人免费av网站 | 中文字幕人成不卡一区 | 亚洲成a人片77777kkkk1在线观看 | 欧美日韩精品免费观看视频 | 韩国av在线播放 | 日本久久精品视频 | 91视频 - v11av | 精品亚洲免费视频 | 91精品视屏 | 久久综合之合合综合久久 | 日韩中午字幕 | 免费一级片在线观看 | 97精品国产97久久久久久粉红 | 日韩影视在线 | 国产精品18久久久久vr手机版特色 | 国产精品资源网 | 六月天综合网 | 又黄又爽又刺激的视频 | 久久这里有 | 99一区二区三区 | 中文字幕成人一区 | 成年美女黄网站色大片免费看 | 中文字幕久久网 | 日韩精品在线视频免费观看 | 在线观看深夜福利 | 超碰在97| 免费亚洲成人 | 国产天天爽 | 国产视频精选 | 91在线影院| 色网av| 欧美日韩在线播放一区 | 日韩精品无码一区二区三区 | 特级a老妇做爰全过程 | 特片网久久 | 婷婷中文字幕综合 | av线上看 | 福利一区二区三区四区 | 四虎影视4hu4虎成人 | 天堂av在线7 | 91精品国产高清自在线观看 | 亚洲成av人影院 | 麻豆视频在线看 | 精品久久久影院 | aaa毛片视频 | 日本激情视频中文字幕 | 国产区av在线 | 欧美激情综合五月色丁香 | 天天干天天干天天干 | 久久国产精品免费看 | 黄色毛片视频 | 国产黄色电影 | 日韩欧美视频在线观看免费 | 国产视频2 | 四虎国产永久在线精品 | 中文字幕亚洲国产 | 久久99精品一区二区三区三区 | 日韩欧美视频在线播放 | 国产最新91 | 成年人在线视频观看 | 精品国产美女 | 色婷婷福利视频 | 欧美日韩久久久 | 国产精品igao视频网入口 | 在线观看91精品国产网站 | 日韩资源在线 | 99视频在线免费观看 | 国产欧美日韩一区 | 波多野结衣一区二区 | 久久网站免费 | 人人玩人人添人人澡97 | 国产成人精品午夜在线播放 | 成人午夜久久 | 亚洲五月婷 | 天天爱天天爽 | 欧美一区二区三区四区夜夜大片 | 天天干,夜夜爽 | 日韩黄色免费电影 | 在线观看的av网站 | 天天操天天色综合 | 日韩视频在线不卡 | 国产精品一区二区吃奶在线观看 | 成人欧美一区二区三区在线观看 | a视频免费在线观看 | 国产一区免费在线观看 | 久久免费av电影 | 天天曰视频| 97麻豆视频 | 国产精品成人免费一区久久羞羞 | 五月天婷亚洲天综合网精品偷 | 17videosex性欧美 | 中文字幕在线观看网址 | 人人玩人人添人人澡超碰 | 久久久久一区二区三区 | 久久精品久久精品 | 欧美精品久久久久久久 | 最新影院 | 国产精品1024 | 九九九九精品九九九九 | 日韩在线观看精品 | 欧美一级特黄aaaaaa大片在线观看 | 黄色精品一区 | 国产在线毛片 | av九九| 亚洲女人天堂成人av在线 | 伊人色综合久久天天 | 色综合夜色一区 | 9色在线视频 | 毛片随便看 | 国产成人久久77777精品 | 免费精品 | 外国av网| 97福利| 人人干狠狠干 | 国产精品免费一区二区三区在线观看 | 国产伦理一区二区三区 | 国产精品theporn | 色婷五月天 | 97色涩 | 久久天| 日日夜夜艹| 欧美精品免费在线 | 亚洲黄色高清 | 国产精品久久久久高潮 | 最近最新最好看中文视频 | 欧美精品亚洲精品日韩精品 | 国产精品九九热 | 国产一区在线看 | 色综合久久网 | 欧美一二三区播放 | 久草com| 国内丰满少妇猛烈精品播 | 国内精品久久久久影院男同志 | 五月婷婷深开心 | 九九久久婷婷 | 天天干天天色2020 | 日韩在线 一区二区 | 久久久高清 | 色婷婷激情五月 | 国产小视频免费观看 | 在线免费观看欧美日韩 | 国产亚洲精品久久久久久无几年桃 | 国产精品av免费在线观看 | 色综合久久88色综合天天免费 | 91人人爽人人爽人人精88v | 日韩欧美国产免费播放 | 国产剧情在线一区 | 日本黄色免费在线 | 免费网址你懂的 | 日韩亚洲在线观看 | 在线99 | 99久久久精品| 久久99精品久久久久久秒播蜜臀 | 国产视频二区三区 | 久久国产美女视频 | 99久久精品电影 | 日日夜夜添| 国产成人av电影在线观看 | 欧美久久久久久久久久久 | 一级免费黄视频 | 久久免费精品国产 | 久草在线观看资源 | 欧美日韩国产网站 | 天天操天天摸天天爽 | 97国产大学生情侣酒店的特点 | 成人国产精品一区二区 | 国产一区二区三区网站 | 国产精品岛国久久久久久久久红粉 | 黄色小网站在线 | 欧美精品久久久久久久久免 | 国产91影院| 在线看日韩av| 91亚洲国产成人久久精品网站 | 91视频免费网站 | 免费观看丰满少妇做爰 | 在线播放 亚洲 | 欧美日韩网站 | 色综合久久天天 | 欧美大香线蕉线伊人久久 | 免费观看版| 一区二区av| 日日爱网址 | 久久免费99精品久久久久久 | 色av男人的天堂免费在线 | 日韩三级不卡 | 最近日本韩国中文字幕 | 国产又粗又硬又长又爽的视频 | 免费在线观看国产精品 | 久久国产剧场电影 | 97人人澡人人添人人爽超碰 | 丁香六月激情 | 日韩一区正在播放 | 天天摸日日摸人人看 | 黄av免费在线观看 | 综合久久网 | 国产91粉嫩白浆在线观看 | 热久久精品在线 | 人人爽人人搞 | 91福利视频免费观看 | 麻花豆传媒mv在线观看 | 狠狠色丁香| 黄色网中文字幕 | 六月丁香伊人 | 最新成人av | 日韩av在线不卡 | 麻豆91网站 | 亚洲国产精品小视频 | 国产美女视频网站 | 毛片激情永久免费 | 日韩高清在线不卡 | 免费看色的网站 | 日韩专区视频 | 久久精品一区二区三区国产主播 | 亚洲九九九在线观看 | 91av播放 | 国产精品久久久久永久免费看 | 免费色视频在线 | 69视频永久免费观看 | 久久久久久久久久国产精品 | 99国产精品免费网站 | 亚洲 综合 专区 | 国产精品日韩久久久久 | 99国产精品久久久久老师 | 天天操天天射天天操 | 国产福利在线免费观看 | 青草视频在线看 | 麻豆91网站 | 天天操夜夜操 | 成人av播放| 91高清视频 | 久久图 | 中文字幕二区在线观看 | 国产精品久久久网站 | 久草91视频 | 午夜精品视频一区二区三区在线看 | 五月天久久婷 | 精品产品国产在线不卡 | 99热这里只有精品8 久久综合毛片 | 国产在线播放不卡 | 久草在线免费在线观看 | 一区二区不卡高清 | 黄色av成人在线观看 | 九九免费在线观看 | 午夜久久影视 | 九九热在线观看视频 | 欧美日韩精品在线观看视频 | 欧美精品乱码久久久久久 | 特级毛片aaa| 精品久久久久国产免费第一页 | 少妇高潮流白浆在线观看 | 一区二区三区在线不卡 | www日韩精品 | 国精产品999国精产品视频 | 国产一二三区在线观看 | 人人澡澡人人 | 激情综合一区 | 又色又爽又黄高潮的免费视频 | 天天综合五月天 | 98精品国产自产在线观看 | 国产成人三级三级三级97 | 成人国产精品一区二区 | 国产成人免费 | 久久免费看毛片 | 中文字幕免费成人 | 99久热在线精品视频观看 | 黄色影院在线免费观看 | 国产香蕉久久精品综合网 | 日本黄色免费网站 | 在线免费高清一区二区三区 | 999电影免费在线观看 | 综合网欧美 | 久久激情小说 | 在线а√天堂中文官网 | 97超碰人人澡人人爱学生 | 欧美另类交人妖 | 亚洲人在线7777777精品 | 国产一区二区视频在线 | 国产成人不卡 | 久久高清av| 人人玩人人爽 | 人人爽影院 | 欧美日韩国产精品久久 | 国色天香在线 | 国产精品久久久久久久免费大片 | 天堂入口网站 | 一区二区三区四区在线免费观看 | 久久久久综合视频 | 97久久久免费福利网址 | 国产69精品久久久久9999apgf | 精品久久99| 亚洲欧美激情精品一区二区 | 黄色软件视频大全免费下载 | 国产夫妻性生活自拍 | 中文字幕综合在线 | 亚洲一区二区三区四区在线视频 | 成人性生爱a∨ | 91久久久久久久 | 亚洲精品小区久久久久久 | 最新国产精品亚洲 | 成+人+色综合 | 狠狠躁日日躁狂躁夜夜躁av | 欧美一级免费高清 | 色婷婷国产精品 | 中文字幕日韩免费视频 | 91亚洲精品久久久 | 99久久精品国产一区二区三区 | 国产精品乱码久久 | 午夜av免费看 | 成人一级免费电影 | wwxxxx日本| 国产免费人成xvideos视频 | 久久都是精品 | 久久视频这里有久久精品视频11 | 精品国产1区2区3区 国产欧美精品在线观看 | 久久999精品| 久久久久女教师免费一区 | 国产破处精品 | 国产在线色| 午夜av在线播放 | 成人在线观看网址 | 免费观看xxxx9999片 | 在线观看麻豆av | 中文字幕视频一区 | 国产成人精品亚洲日本在线观看 | www五月天婷婷 | 国产色a在线观看 | 在线成人中文字幕 | 国产.精品.日韩.另类.中文.在线.播放 | 久久看片网站 | 国偷自产中文字幕亚洲手机在线 | 欧美在线你懂的 | 日韩在线观看中文 | 国产成人久久av977小说 | www.五月天激情| 国产96在线视频 | 日韩在线免费视频观看 | 激情伊人五月天 | 日韩av影片在线观看 | 久久久精品视频成人 | 国产精品美女免费视频 | 欧洲精品视频一区二区 | 免费av片在线 | 国产小视频在线 | 韩日精品在线观看 |