最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解析C++中指向?qū)ο蟮闹羔樖褂?/h1>
 更新時(shí)間:2015年09月17日 15:13:12   投稿:goldensun  
這篇文章主要介紹了解析C++中指向?qū)ο蟮闹羔樖褂?是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下

C++指向?qū)ο蟮某V羔?br /> 將指針變量聲明為const型,這樣指針值始終保持為其初值,不能改變。

如:

  Time t1(10,12,15),t2; //定義對(duì)象
  Time * const ptr1; //const位置在指針變量名前面,規(guī)定ptr1的值是常值
  ptr1=&t1; //ptr1指向?qū)ο髏1,此后不能再改變指向
  ptr1=&t2; //錯(cuò)誤,ptr1不能改變指向

定義指向?qū)ο蟮某V羔樀囊话阈问綖椋?br />

  類名 * const 指針變量名;


也可以在定義指針變量時(shí)使之初始化,如將上面第2, 3行合并為:

  Time * const ptr1=&t1; //指定ptr1指向t1

請(qǐng)注意,指向?qū)ο蟮某V羔樧兞康闹挡荒芨淖儯词冀K指向同一個(gè)對(duì)象,但可以改變其所指向?qū)ο?如t1)的值。

什么時(shí)候需要用指向?qū)ο蟮某V羔樐??如果想將一個(gè)指針變量固定地與一個(gè)對(duì)象相聯(lián)系(即該指針變量始終指向一個(gè)對(duì)象),可以將它指定為const型指針變量,這樣可以防止誤操作,增加安全性。

往往用常指針作為函數(shù)的形參,目的是不允許在函數(shù)執(zhí)行過(guò)程中改變指針變量的值, 使其始終指向原來(lái)的對(duì)象。如果在函數(shù)執(zhí)行過(guò)程中修改了該形參的值,編譯系統(tǒng)就會(huì)發(fā)現(xiàn)錯(cuò)誤,給出出錯(cuò)信息,這樣比用人工來(lái)保證形參值不被修改更可靠。

C++指向常對(duì)象的指針變量
為了更容易理解指向常對(duì)象的指針變量的概念和使用,首先了解指向常變量的指針變量,然后再進(jìn)一步研究指向常對(duì)象的指針變量。下面定義了一個(gè)指向常變量的指針變量ptr:

  const char *ptr;


注意const的位置在最左側(cè),它與類型名char緊連,表示指針變量ptr指向的char變量是常變量,不能通過(guò)ptr來(lái)改變其值的。

定義指向常變量的指針變量的一般形式為:

  const 類型名 *指針變量名;

幾點(diǎn)說(shuō)明:
1) 如果一個(gè)變量已被聲明為常變量,只能用指向常變量的指針變量指向它,而不能用一般的(指向非const型變量的)指針變量去指向它。如:

  const char c[] ="boy"; //定義 const 型的 char 數(shù)組
  const char * pi;  //定義pi為指向const型的char變量的指針變量
  pi =c;  //合法,pi指向常變量(char數(shù)組的首元素)
  char *p2=c; //不合法,p2不是指向常變量的指針變量

2) 指向常變量的指針變量除了可以指向常變量外,還可以指 向未被聲明為const的變量。此時(shí)不能通過(guò)此指針變量改變?cè)撟兞康闹怠H纾?br />

  char cl ='a'; //定義字符變量cl,它并未聲明為const
  const char *p; //定義了一個(gè)指向常變量的指針變量p
  p = &cl; //使p指向字符變量cl
  *p = 'b'; //非法,不能通過(guò)p改變變量cl的值
  cl = 'b'; //合法,沒(méi)有通過(guò)p訪問(wèn)cl,cl不是常變量


3) 如果函數(shù)的形參是指向非const型變量的指針,實(shí)參只能用指向非const變量的指針,而不能用指向const變量的指針,這樣,在執(zhí)行函數(shù)的過(guò)程中可以改變形參指針變量所指向的變量(也就是實(shí)參指針?biāo)赶虻淖兞?的值。

如果函數(shù)的形參是指向const型變量的指針,在執(zhí)行函數(shù)過(guò)程中顯然不能改變指針變量所指向的變量的值,因此允許實(shí)參是指向const變量的指針,或指向非const變量的指針。如:

  const char str[ ] = "boy"; //str 是 const 型數(shù)組名
  void fun( char * ptr) ; //函數(shù)fun的形參是指向非const型變量的指針
  fun(str); //調(diào)用fun函數(shù),實(shí)參是const變量的地址,非法

因?yàn)樾螀⑹侵赶蚍莄onst型變量的指針變量,按理說(shuō),在執(zhí)行函數(shù)過(guò)程中它所指向的變量的值是可以改變的。但是形參指針和實(shí)參指針指向的是同一變量,而實(shí)參是const 變量的地址,它指向的變量的值是不可改變的。這就發(fā)生矛盾。因此C++要求實(shí)參用非const變量的地址(或指向非const變量的指針變量)。

上表的對(duì)應(yīng)關(guān)系與在(2)中所介紹的指針變量和其所指向的變量的關(guān)系是一致的: 指向常變量的指針變量可以指向const和非const型的變量,而指向非const型變量的指針變量只能指向非const的變量。

以上介紹的是指向常變量的指針變量,指向常對(duì)象的指針變量的概念和使用是與此類似的,只要將“變量”換成“對(duì)象”即可。

1) 如果一個(gè)對(duì)象已被聲明為常對(duì)象,只能用指向常對(duì)象的指針變量指向它,而不能用一般的(指向非const型對(duì)象的)指針變量去指向它。

2) 如果定義了一個(gè)指向常對(duì)象的指針變量,并使它指向一個(gè)非const的對(duì)象,則其指向的對(duì)象是不能通過(guò)指針來(lái)改變的。如:

  Time t1(10,12,15); //定義Time類對(duì)象t1,它是非const型對(duì)象
  const Time *p = &t1; //定義p是指向常對(duì)象的指針變量,并指向t1
  t1.hour = 18; //合法,t1不是常變量
  (* p).hour = 18; //非法,不齙通過(guò)指針變量改變t1的值

如果希望在任何情況下t1的值都不能改變,則應(yīng)把它定義為const型,如:

  const Time t1(lO,12,15);

請(qǐng)注意指向常對(duì)象的指針變量與指向?qū)ο蟮某V羔樧兞吭谛问缴虾妥饔蒙系膮^(qū)別。

  Time * const p; //指向?qū)ο蟮某V羔樧兞?
  const Time *p; //指向常對(duì)象的指針變量

3) 指向常對(duì)象的指針最常用于函數(shù)的形參,目的是在保護(hù)形參指針?biāo)赶虻膶?duì)象,使它在函數(shù)執(zhí)行過(guò)程中不被修改。

請(qǐng)記住這樣一條規(guī)則: 當(dāng)希望在調(diào)用函數(shù)時(shí)對(duì)象的值不被修改,就應(yīng)當(dāng)把形參定義為指向常對(duì)象的指針變量,同時(shí)用對(duì)象的地址作實(shí)參(對(duì)象可以是const或非const型)。如果要求該對(duì)象不僅在調(diào)用函數(shù)過(guò)程中不被改變,而且要求它在程序執(zhí)行過(guò)程中都不改變,則應(yīng)把它定義為const型。

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

相關(guān)文章

  • 詳解C++的靜態(tài)內(nèi)存分配與動(dòng)態(tài)內(nèi)存分配

    詳解C++的靜態(tài)內(nèi)存分配與動(dòng)態(tài)內(nèi)存分配

    內(nèi)存分配 (Memory Allocation) 是指為計(jì)算機(jī)程序或服務(wù)分配物理內(nèi)存空間或虛擬內(nèi)存空間的一個(gè)過(guò)程,本文主要介紹了C++的靜態(tài)內(nèi)存分配與動(dòng)態(tài)內(nèi)存分配,感興趣的同學(xué)可以參考閱讀
    2023-06-06
  • fcntl函數(shù)的使用詳解

    fcntl函數(shù)的使用詳解

    本篇文章是對(duì)fcntl函數(shù)的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • getdate()函數(shù)的用法實(shí)例

    getdate()函數(shù)的用法實(shí)例

    getdate()函數(shù)的用法實(shí)例,需要的朋友可以參考一下
    2013-03-03
  • C++實(shí)現(xiàn)模板方法模式的示例代碼

    C++實(shí)現(xiàn)模板方法模式的示例代碼

    這篇文章主要介紹了++實(shí)現(xiàn)模板方法模式,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • C++遞歸算法實(shí)例代碼

    C++遞歸算法實(shí)例代碼

    這篇文章主要介紹了C++遞歸算法實(shí)例代碼,還是比較不錯(cuò)的,運(yùn)用了遞歸算法解決相關(guān)問(wèn)題,這里分享給大家,需要的朋友可以參考下。
    2017-11-11
  • 深入淺析C++多態(tài)性與虛函數(shù)

    深入淺析C++多態(tài)性與虛函數(shù)

    多態(tài)是指同樣的消息被不同的對(duì)象接收時(shí)導(dǎo)致不同的行為。本文通過(guò)實(shí)例代碼給大家介紹了C++多態(tài)性與虛函數(shù)的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2020-02-02
  • C++直接cout指針名的含義?

    C++直接cout指針名的含義?

    今天小編就為大家分享一篇關(guān)于C++直接cout指針名的含義?,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-04-04
  • C/C++中#define的妙用分享

    C/C++中#define的妙用分享

    本文主要介紹了C++/C關(guān)于#define的一些妙用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • C++ Boost PropertyTree解析INI文件詳解

    C++ Boost PropertyTree解析INI文件詳解

    Boost PropertyTree庫(kù)不僅可以解析JSON,XML格式,還可以直接解析INI格式文件。這篇文章就是為大家介紹一下如何通過(guò)Boost PropertyTree解析INI文件,需要的可以參考一下
    2022-01-01
  • c++中queue用法超詳細(xì)講解(入門必看!)

    c++中queue用法超詳細(xì)講解(入門必看!)

    queue是一種容器轉(zhuǎn)換器模板,調(diào)用#include< queue>即可使用隊(duì)列類,下面這篇文章主要給大家介紹了關(guān)于c++中queue用法超詳細(xì)講解的相關(guān)資料,需要的朋友可以參考下
    2022-10-10

最新評(píng)論

安庆市| 互助| 平和县| 新竹县| 辰溪县| 闵行区| 木里| 乐陵市| 清镇市| 连南| 长子县| 郁南县| 清徐县| 镇宁| 库伦旗| 衡阳县| 天镇县| 石家庄市| 阳江市| 临城县| 曲沃县| 肇东市| 鱼台县| 喜德县| 大新县| 东方市| 宜昌市| 伊春市| 安远县| 肃北| 平乡县| 水城县| 乐清市| 杭州市| 灌南县| 和顺县| 伊吾县| 康乐县| 苗栗市| 安阳县| 杭锦后旗|