指標常量和常量指標的區別

xyhGOGOGO發表於2020-12-24


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


一、指標常量是什麼?

指標常量是由英文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


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

參考連結:如何理解常量指標與指標常量?

相關文章