天天看點

常量指針,指針常量,指向常量的指針常量

迫于面試的壓力,在網上收集了一些關于指針常量、常量指針和指向常量的指針常量的資料。這些概念也确實讓你頭暈;

------------------------------------------------------------------------------------------------------------------------------------------

http://www.zhihu.com/question/19829354

const:具有const限定類型的左值表達式的值無法修改。使用const限定符的意圖是表示值不會變化的變量。

const int p; //表示P不能作為指派表達式的左操作數,也不能作為增值和減值操作符的操作數,即不允許變化的變量。
const int *p; //常量指針,表示指向常量資料的指針
int const *p; //常量指針,表示指向常量資料的指針
int * const p ="abc" ; //指針常量
const int * const p = "de"; //指向常量的指針常量
           

為了一次性徹底說明問題,個人覺得有必要從定義嚴格說明,特此引進概念“聲明器”,聲明器引進了被聲明内容的名字,同時也提供了額外的類型資訊。聲明器包括:指針聲明器、直接聲明器。而直接聲明器又包括:簡單聲明器、函數聲明器、數組聲明器。

為了更好的了解,首先看一個簡單聲明器的例子,假設T是個類型指定符,id是任何辨別符

。下面這個聲明:

T id;//表示id是T類型的,此時,id被稱為簡單聲明器。

轉回正題,再看指針聲明器。

指針聲明器(格式):

指針 直接聲明器

指針:* 類型限定符(可選) //類型限定符即所說的const

同樣,一個指針聲明器的例子,假設D是封裝了辨別符id的任何聲明器,下面這個聲明:

T *D;//表示id的類型是“……指向類型T的指針”。

如果在指針聲明器内出現了類型限定符,即* const D形式(const隻是類型限定符的一種),那麼限定符作用于指針,而不是作用于指針所指向的對象。例如,int * const p; //指針常量,const作用于指針本身。

如果在指針聲明器外出現了類型限定符,即 const T (*D)或 T const (*D)形式,那麼限定符作用于類型T。例如,int const *p;或 const int *p;//指向常量資料的指針,const作用于int。

--------------------------------------------------------------------------------------------------------------------------------------

指針常量和常量指針的舉例:

http://www.cppblog.com/cc/archive/2006/03/12/4045.html

---------------------------------------------------------------------------------------------------------------------------------------

常量指針:指向常量的指針,指針指向的記憶體位址的内容是不可以修改的,指針指向的記憶體位址可以修改。

指針常量:指針指向的位址是不可以修改的,指針指向的記憶體位址的内容是可以修改的。指針常量必須在聲明的同時對其進行初始化,不允許先聲明一個指針常量後再對其指派。

指向常量的指針常量:是一個常量,指針指向的記憶體位址及其内容均不可以修改。