午夜国产狂喷潮在线观看|国产AⅤ精品一区二区久久|中文字幕AV中文字幕|国产看片高清在线

    C++中的指針用法大搜羅
    來源:易賢網(wǎng) 閱讀:714 次 日期:2014-09-05 15:49:34
    溫馨提示:易賢網(wǎng)小編為您整理了“C++中的指針用法大搜羅”,方便廣大網(wǎng)友查閱!

    在C++中,指針用得比較多,對于里面眾多的指針用法,不免弄得有些糊涂,自從我從圖書館里借到一本譚浩強(qiáng)教授主編的《C++面向?qū)ο蟪绦蛟O(shè)計(jì)》后,才幫我理清了思路?,F(xiàn)把部分內(nèi)容展現(xiàn)給大家,希望對大家有所幫助。

    C++程序設(shè)計(jì)重要基礎(chǔ)就是類和對象,對象指針是很重要的一部分,包括指向?qū)ο蟮闹羔槨⒅赶驅(qū)ο蟪蓡T的指針、this指針、指向?qū)ο蟮某V羔?、指向常對象的指針等?/P>

    1、指向?qū)ο蟮闹羔?/P>

    定義:對象空間的起始地址就是對象的指針。

    說明:在建立對象時,編譯系統(tǒng)就為每個對象分配一定的存儲空間以存放其成員,不過注意,在一般情況下不同對象的數(shù)據(jù)存儲單元中存放的數(shù)據(jù)成員是不相同,而不同對象的函數(shù)代碼卻是相同的,也就是說,它們的函數(shù)代碼是共享的。這時我們可以定義一個指針變量用來存放對象的指針。

    定義指向類對象的指針變量的一般形式是:

    類名 *對象指針名;

    如對于與個Time類對象,我們可以有:

    Time t;

    Time *p;

    p=&t;

    我們就可以通過對象指針訪問對象和對象的成員,假如所定義的類中有數(shù)據(jù)成員hour、minute、sec,成員函數(shù)有g(shù)ettime(),則

    (*p).hour 即為p指向?qū)ο笾械膆our成員,相當(dāng)于t.hour

    (*p).gettime() 即為p指向?qū)ο笾械某蓡T函數(shù)gettime(),相當(dāng)于t.gettime()

    也可以用如下形式:

    p->hour 和 p->gettime()和上面是等價的。

    2、指向?qū)ο蟪蓡T的指針

    (1)指向?qū)ο髷?shù)據(jù)成員的指針

    在C中我們學(xué)過指向普通變量的指針變量,在C++中定義指向?qū)ο髷?shù)據(jù)成員的指針變量的方法和定義指向普通變量的指針變量方法相同,其一般形式為:

    數(shù)據(jù)類型名 *指針變量名;

    如:

    int *p;

    p=&t.hour; //將對象t的數(shù)據(jù)成員hour的地址賦給p,p指向t.hour

    (2)指向?qū)ο蟪蓡T函數(shù)的指針

    定義指向?qū)ο蟪蓡T函數(shù)的指針變量和定義指向普通函數(shù)的指針變量不同。

    在定義指向普通函數(shù)的指針變量時我們可以這樣定義:

    void (*p)();

    p=fun;

    (*p)(); //調(diào)用fun函數(shù)

    然而編譯系統(tǒng)要求在將函數(shù)地址賦給指針變量時必須滿足三個條件:

    函數(shù)參數(shù)類型及個數(shù)要匹配

    函數(shù)返回值的類型要匹配

    所屬的類要匹配

    顯然在上面的p與類是無關(guān)的。為了滿足第三條,我們可以為指針指定類,故定義指向?qū)ο蟪蓡T函數(shù)的指針變量一般形式為:

    數(shù)據(jù)類型(類名::*指針變量名)(參數(shù)表列);

    可以讓指針指向公用的成員函數(shù),如:

    void (Time::*p)(); //定義指向Time類對象成員函數(shù)的指針變量p

    p=&Time::gettime; //把Time類的公用成員函數(shù)gettime()地址賦給指針變量p

    (t.*p)(); //調(diào)用Time類對象t的成員函數(shù)gettime()

    注意:因?yàn)槌蓡T函數(shù)不存放在對象空間中,多個同類對象共享此成員函數(shù)代碼,所以在將成員函數(shù)的入口地址賦給指針變量是應(yīng)寫成:

    指向?qū)ο蟪蓡T函數(shù)的指針變量=&類名::成員函數(shù)名;

    在成員函數(shù)名后面沒有"()",如果寫成p=&Time::gettime()是錯誤的。[nextp

    3、this指針

    在每個成員函數(shù)中都包含了一個特殊的指針,稱為this,它是指向本類對象的指針,它的值是當(dāng)前被調(diào)用成員函數(shù)所在對象的起始地址。之所以有這個指針,是因?yàn)闉榱吮WC同類的不同對象的成員函數(shù)引用的是指定對象中的數(shù)據(jù)成員,它是系統(tǒng)自動實(shí)現(xiàn)的。

    如定義一個求體積的函數(shù)

    int box::vol()

    {return(height*width*length);}

    假如已經(jīng)定義了對象t,當(dāng)調(diào)用成員函數(shù)t.vol()時,編譯系統(tǒng)就把對象t的起始地址賦給this指針,于是在成員函數(shù)引用數(shù)據(jù)成員時,根據(jù)指針this就可以引用到對象t的數(shù)據(jù)成員。所以C++把上面的函數(shù)處理成

    int box::vol()

    {return(this->height*this->width*this->length);}

    由于this的值是當(dāng)前被調(diào)用成員函數(shù)所在對象的起始地址,所以可以寫成

    int box::vol()

    {return((*this).height*(*this).width*(*this).length);}

    所以在調(diào)用成員函數(shù)t.vlo()時,實(shí)際的調(diào)用方式為t.vol(&t),不過對象t的地址傳給this指針是由系統(tǒng)自動完成的,不需人為加上。

    4、指向?qū)ο蟮某V羔?/P>

    將指向?qū)ο蟮闹羔樧兞柯暶鳛閏onst型且進(jìn)行處始化,這樣指針值始終保持為其初值,不能改變其指向。

    如:

    Time t1(8,8,8),t2;

    Time *const p=&t1; //常指針p指向?qū)ο髏1

    p=&t2; //試圖改變p的指向,非法

    由上面我們可以看出定義指向?qū)ο蟮某V羔樀囊话阈问綖椋?/P>

    類名 *const 指針變量名=對象的起始地址;

    注意:指向?qū)ο蟮某V羔樧兞康闹挡荒芨淖儯梢愿淖兯赶驅(qū)ο笾械臄?shù)據(jù)成員的值。

    常指針一般用作函數(shù)的參數(shù),這樣就不允許在函數(shù)執(zhí)行過程中改變指針變量的值,使其始終保持指向原來的對象。

    5、指向常對象的指針變量

    首先回顧一下指向常變量的指針變量,其一般形式為:

    const 類型名 *指針變量名;

    如:

    const char *p;

    如果一個變量已經(jīng)被聲明為常變量,那么只能用指向常變量的指針變量去指向它,而不能用一般的指針變量。另外,指向常變量的指針變量除了可以指向常變量外,還可以指向未被聲明為const的變量,但也不能通過該指針改變其值。例如:

    char c='a' //定義字符變量c,未聲名為const

    const char *p; //定義指向常變量的指針變量p

    p=&c; //p指向字符變量c

    *p='b'; //非法

    c='b'; //合法

    說明:上例中,指針變量p指向字符變量c,并不說把c也聲明成常變量,而只是說在通過指針變量引用c時,c具有常變量的特征,其值是不能改變的,但c仍然是一個普通變量。

    在指向常變量的指針中,關(guān)于函數(shù)形參的指針類型有幾點(diǎn)值得注意:

    如果函數(shù)形參是非const型指針變量,實(shí)參只能用指向非const型指針;如果函數(shù)形參是指向const型變量的指針,實(shí)參則可以是const型的或非const型的指針變量。換句話說就是指向常變量的指針可以指向const和非const型的變量,而指向非const型變量的指針只能指向非const的變量。

    用指針變量作形參時形參和實(shí)參的對應(yīng)關(guān)系表

    形參實(shí)參合法與否改變指針?biāo)笇ο蟮闹?/P>

    指向非const型變量的指針非const變量的地址合法行

    指向非const型變量的指針const變量的地址非法/

    指向const型變量的指針const變量的地址合法不行

    指向const型變量的指針非const變量的地址合法不行

    下面說到正題,指向常對象的指針變量和指向常變量指針變量類似。

    如果一個對象已經(jīng)被聲明為長對象,只能用指向常對象的指針變量指向它,而不能用一般的指針變量指向它。

    如果定義了一個指向常對象的指針變量且使它指向一個非const的對象,其指向的對象不能通過指針來改變。

    如果定義了一個指向常對象的指針變量,是不能通過它改變所指向的對象的值的,但是指針變量本身的值是可以改變的。

    如:

    Time t1(8,8,8),t2; //定義對象

    const time *p=&t1; //定義指向常對象的指針p,并使它指向t1

    p=&t2; //合法,指針p指向?qū)ο髏2

    所以當(dāng)我們希望在調(diào)用函數(shù)時對象的值不被修改,我們就可以把形參定義為const型的指針變量,同時用對象的地址作實(shí)參(對象可以是const或非const型);當(dāng)要求對象不僅在調(diào)用函數(shù)中不被改變,而且在程序執(zhí)行過程中也不發(fā)生改變,我們就把它定義為const型。所以指向常對象的指針最常用于函數(shù)的參數(shù),以保護(hù)形參指針?biāo)赶虻膶ο笤诤瘮?shù)執(zhí)行過程中不被修改。

    以上是我學(xué)習(xí)C++指針時的記錄,也是對C++指針用法的總結(jié),我想對大家學(xué)習(xí)C++應(yīng)該是很有幫助的。

    更多信息請查看IT技術(shù)專欄

    更多信息請查看網(wǎng)絡(luò)編程
    上一篇:C++泛型用法
    易賢網(wǎng)手機(jī)網(wǎng)站地址:C++中的指針用法大搜羅
    由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

    2025國考·省考課程試聽報(bào)名

    • 報(bào)班類型
    • 姓名
    • 手機(jī)號
    • 驗(yàn)證碼
    關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機(jī)站點(diǎn) | 投訴建議
    工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
    云南網(wǎng)警備案專用圖標(biāo)
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
    云南網(wǎng)警報(bào)警專用圖標(biāo)