国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

解析C++中指向?qū)ο蟮闹羔樖褂?/h1>
2020-01-26 14:52:05
字體:
供稿:網(wǎng)友

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í)行過程中改變指針變量的值, 使其始終指向原來的對(duì)象。如果在函數(shù)執(zhí)行過程中修改了該形參的值,編譯系統(tǒng)就會(huì)發(fā)現(xiàn)錯(cuò)誤,給出出錯(cuò)信息,這樣比用人工來保證形參值不被修改更可靠。

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

  const char *ptr;


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

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

  const 類型名 *指針變量名;

幾點(diǎn)說明:
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í)不能通過此指針變量改變?cè)撟兞康闹怠H纾?br />

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


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

如果函數(shù)的形參是指向const型變量的指針,在執(zhí)行函數(shù)過程中顯然不能改變指針變量所指向的變量的值,因此允許實(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型變量的指針變量,按理說,在執(zhí)行函數(shù)過程中它所指向的變量的值是可以改變的。但是形參指針和實(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ì)象是不能通過指針來改變的。如:

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

主站蜘蛛池模板:
江油市|
南汇区|
和龙市|
鹤峰县|
彝良县|
张掖市|
沁阳市|
黑水县|
临漳县|
尤溪县|
新密市|
滨州市|
东莞市|
金门县|
甘谷县|
法库县|
吉隆县|
蚌埠市|
改则县|
乐都县|
德阳市|
隆尧县|
稷山县|
靖安县|
廉江市|
思南县|
南宁市|
鄢陵县|
大安市|
泗阳县|
额尔古纳市|
肇庆市|
新疆|
峨眉山市|
镇坪县|
阜阳市|
瓦房店市|
奇台县|
山阴县|
卢湾区|
龙江县|