成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C++中的指針用法匯集

開發(fā) 后端 開發(fā)工具
大家都認(rèn)為,C++語言之所以強(qiáng)大,以及其自由性,很大部分體現(xiàn)在其靈活的指針運(yùn)用上。因此,說指針是C++語言的靈魂,一點(diǎn)都不為過。那么,就讓我們一來看C++中指針的用法吧!

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

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

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

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

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

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

類名 *對(duì)象指針名;

如對(duì)于與個(gè)Time類對(duì)象,我們可以有:

 

  1. Time t;  
  2. Time *p;  
  3. p=&t; 

 

我們就可以通過對(duì)象指針訪問對(duì)象和對(duì)象的成員,假如所定義的類中有數(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()和上面是等價(jià)的。

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

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

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

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

如:

 

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

 

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

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

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

 

  1. void (*p)();  
  2. p=fun;  
  3. (*p)(); //調(diào)用fun函數(shù) 

 

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

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

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

所屬的類要匹配

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

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

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

 

  1. void (Time::*p)(); //定義指向Time類對(duì)象成員函數(shù)的指針變量p  
  2. p=&Time::gettime; //把Time類的公用成員函數(shù)gettime()地址賦給指針變量p  
  3. (t.*p)(); //調(diào)用Time類對(duì)象t的成員函數(shù)gettime() 

 

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

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

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

3、this指針

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

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

 

  1. int box::vol()  
  2. {return(height*width*length);} 

 

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

 

  1. int box::vol()  
  2. {return(this->height*this->width*this->length);} 

 

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

 

  1. int box::vol()  
  2. {return((*this).height*(*this).width*(*this).length);} 

 

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

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

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

如:

 

  1. Time t1(8,8,8),t2;  
  2. Time *const p=&t1; //常指針p指向?qū)ο髏1  
  3. p=&t2; //試圖改變p的指向,非法 

 

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

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

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

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

5、指向常對(duì)象的指針變量

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

const 類型名 *指針變量名;

如:

 

  1. const char *p; 

 

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

 

  1. char c='a' //定義字符變量c,未聲名為const  
  2. const char *p; //定義指向常變量的指針變量p  
  3. p=&c; //p指向字符變量c  
  4. *p='b'//非法  
  5. c='b'//合法 

 

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

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

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

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

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

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

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

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

如:

 

  1. Time t1(8,8,8),t2; //定義對(duì)象  
  2. const time *p=&t1; //定義指向常對(duì)象的指針p,并使它指向t1  
  3. p=&t2; //合法,指針p指向?qū)ο髏2 

 

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

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

【編輯推薦】

  1. C++中的this指針
  2. 詳解C++中的Boost智能指針
  3. 9.4.1 指針、數(shù)組和地址間的關(guān)系
  4. C/C++中的指針的應(yīng)用及注意問題
責(zé)任編輯:于鐵 來源: 中國IT實(shí)驗(yàn)室
相關(guān)推薦

2011-04-19 16:38:00

對(duì)象指針指針C++

2011-04-11 11:09:50

this指針

2011-07-20 10:06:54

CC++const

2011-04-07 16:34:05

staticC++

2024-05-27 00:40:00

C++bitset

2024-01-09 09:23:12

指針C++

2024-12-26 10:45:08

2011-04-11 14:18:37

CC++指針

2021-12-21 15:31:10

C++語言指針

2024-01-25 11:42:00

C++編程指針常量

2015-05-13 10:37:58

C++指針與引用

2010-12-17 10:07:59

2023-12-26 12:13:31

野指針C++編程

2014-01-24 09:49:01

C++指針

2024-05-15 16:01:04

C++編程開發(fā)

2011-07-20 17:54:02

C++

2010-01-26 13:42:28

C++指針

2011-07-15 01:38:56

C++this指針

2024-04-01 09:13:20

C++函數(shù)遞增

2023-12-20 12:40:51

C++RAII編程
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 久久久久国产一区二区三区四区 | 亚洲一区二区三区乱码aⅴ 四虎在线视频 | 久草中文网 | 国产高清视频 | 亚洲国产精品久久久久 | 日韩精品一区二区三区在线播放 | 国产成人精品一区 | 九九热在线免费观看 | 亚洲欧美日韩中文字幕一区二区三区 | 亚洲成人一区二区 | 久久婷婷色 | 91色在线视频 | 欧美日韩在线一区二区三区 | 国产精品久久久久久亚洲调教 | 日韩成人免费在线视频 | 瑟瑟免费视频 | 精品综合 | 中文字幕日韩一区 | 一级a性色生活片久久毛片 一级特黄a大片 | 午夜小电影 | 欧美一区二区久久 | 国产农村一级片 | 夜夜骑综合 | 日日干夜夜操 | 日韩精品在线免费观看 | 99精品一级欧美片免费播放 | 黄色在线免费网站 | 91精品国产色综合久久 | 久久91 | 黄色毛片在线看 | 狠狠色综合久久丁香婷婷 | 色欧美综合 | 午夜视频一区二区 | 午夜资源| 亚洲一区二区三区在线播放 | 午夜不卡一区二区 | 色婷婷精品国产一区二区三区 | 最近免费日本视频在线 | 国产精品日韩在线 | 欧美一级在线免费 | 国产视频中文字幕在线观看 |