天天看點

指針常量和常量指針的差別一、指針常量是什麼?二、常量指針是什麼?三、如何記憶和差別它們四 Test Yourself!

C++中指針常量和常量指針的差別

  • 一、指針常量是什麼?
  • 二、常量指針是什麼?
  • 三、如何記憶和差別它們
    • 1.字面上差別它們
    • 2.代碼上差別它們
  • 四 Test Yourself!

指針常量 和 常量指針這兩個詞其實翻譯得不是很合适,是以導緻大家對這兩個概念容易混淆,從英文角度去了解會更容易。

一、指針常量是什麼?

指針常量是由英文

pointer to const

翻譯而來的,看到英文,相信大家不會再搞不清楚它的意義,它代表着一個指向

const

類型變量的指針。

那麼很明顯,指針的指向是可以修改的,因為它隻是個pointer,而指針指向的值是const,是不允許修改的。

二、常量指針是什麼?

常量指針是由英文

const pointer

翻譯而來的,

const

修飾的是

pointer

,說明指針是不可以修改的,因為

pointer

是常量,但指針指向的值是可以修改的。

三、如何記憶和差別它們

1.字面上差別它們

不管是常量指針還是指針常量,轉換成英文都少不了const 和 pointer 兩個單詞。

  • 對于指針常量,指針-pointer,常量-const,拼在一起是pointer const,是不是很别扭,但是我們不改變兩個單詞的順序,隻在中間加上一個

    to

    ,就會變得很自然,pointer to const,它的意義也就顯現出來了。const的是指針指向的值。
  • 對于常量指針,常量-const,指針-pointer,直接拼在一起,就成了const pointer,其意義也就顯而易見了,const的是指針本身。

2.代碼上差別它們

星号*前面的是對被指向對象的修飾,星号*後面的是對指針本身的修飾。

執行個體:

常量指針:

int main()
{
	//pointer to const 指針常量
	int a = 1;
	int b = 2;
	int const* p = &a;
	//*p = 2; error 指向的是常量,不可修改
	p = & b;
}
           

指針常量:

int main()
{
	//const pointer 常量指針
	int a = 1;
	int b = 2;
	int *const p = &a;
	*p = 2;
	p = & b;//error 指針是一個常量,不可修改指向
}
           

小技巧:我們可以先把int const p寫下來,再決定星号*加在哪裡

  • 如果是pointer to const,就寫作int const* p,因為

    星号前是對被指向對象的修飾

    ,現在我們希望被指向對象是一個const。
  • 如果是const pointer,就寫作int* const p,因為

    星号後是對指針的修飾

    ,現在我們希望指針是一個const。

四 Test Yourself!

下面6道題如果大家能準确說出中文或者英文意義,那麼就算過關啦~~

①const int p;

②const int* p;

③int const* p;

④int * const p;

⑤const int * const p;

⑥int const * const p;

1 整形常量p; const int

2 指向整形常量的指針p; pointer to const int

3 指向整型常量的指針p; pointer to const int

4 指向整形的常量指針p; const pointer to int

5 指向整形常量的常量指針p; const pointer to const int

6 指向整形常量的常量指針p; const pointer to const int

以上就是我個人的一些簡單的了解,希望能幫助到大家,如果有問題或者錯誤,歡迎大家在評論區指出,如果看到一定會回複或者及時改正,謝謝朋友們~

參考連結:如何了解常量指針與指針常量?

繼續閱讀