程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++指向const對象的指針和const指針

C++指向const對象的指針和const指針

編輯:C++入門知識

1.指向const對象的指針
我們可以通過指針來修改其所指對象的值,但如果指針指向的是const對象,則不允許使用指針來改變其所指的const值。C++要求指向const對象的指針也是const類型。

const double *pd;                 //可以指向一個const double類型。

 

這裡的const限定的是pd所指的對象,而不是pd。這裡的pd是可以重新指向另外的一個地址的,但不允許使用pd來改變所指向對象的值。

把一個const對象的地址賦給非const對象的指針會導致編譯時錯誤,例如:

const int a=8;

 int *p=&a;                 //error

const int *cp=&a;      //ok

不能使用void*指針保存const對象的地址,可以使用const void*類型的指針保存const類型的地址。

允許把非const對象的地址賦值給指向const對象的指針:

int c=3;

cp=&c;

雖然c不是const類型,但是使用cp修改c的值會導致編譯錯誤。cp被定義為指向const對象的指針,那麼cp就不能改變其所指對象的值。

指向const對象的指針所指的對象不一定是const對象,所以不能保證所指的對象的值不可更改,應為畢竟其所指的對象可以是非const對象,可以使用其他方法更改其值。

可以把指向const對象當做“自以為指向const對象的指針”來理解。

在實際的應用中,指向const對象的指針常用作函數的形參,這樣可以保證在函數中不會應為形參改變實參所指的對象。

2.const指針
const指針是指該指針不可改變。

int num=4;

int *const p=#

可以把p理解為p是指向int類型的const指針。這就意味著不能使p指向其他對象,任何試圖給p賦值的操作導致編譯錯誤。const指針必須在編譯時初始化。

該指針是const並不代表就不能修改其所指對象的值。如果const指針指向非const對象,那麼就可以使用該指針修改所指對象的值,例如

int e=9;

int *const p=&e;

*p=6;

這樣,e的值被修改為6.

還有一種指向const對象的const指針,如下使用:

const int d=4;

const int *const p=&d;

這樣p的值不能修改,p指向對象的值也不能修改。

 

至於指針和typdef這樣的東西,為何要用呢?使用typedef就像是自己打自己一巴掌,把自己搞糊塗了,應該盡量避免使用typedef來定義指針,一家之言。。。。。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved