天天看點

C/C++—資料的共享與保護程式中遇到常量常量指針和指針常量

文章目錄

  • 程式中遇到常量
  • 常量指針和指針常量

程式中遇到常量

當程式中遇到常量時:

如果程式複雜,用到的常量比較多的化,不能很簡單的看出某個常量時用來做什麼的。

在實際中應該盡量避免産生這種Magic Number,可以使用C語言提供的預定義功能

# define PI 3.14
auto f[](double radius){return radius*radius*PI;};
           

預定義有自己的局限(比如不能進行類型檢查)

更好的工具是const關鍵字,它的作用是定義一個常量

對于C風格的字元串,它是用char數組來儲存的。對于一個字元串常量可以這樣定義:

不能修改hello若是不小心寫下*str[2]=‘x’;*這樣的語句,會導緻對隻讀記憶體區域的指派,然後程式會立刻異常終止。

是以對于字元串常量,應使用const關鍵字來進行修飾。

加了const之後,這個錯誤在編譯階段就能被檢查出來,不會再等到實際運作的時候才出問題。

常量指針和指針常量

  • 常量指針是指針指向的内容是常量,可以有以下兩種定義方式:
const int* n;
int const* n;
           

需要注意以下兩點:

常量指針說的是不能通過這個指針改變變量的值,但是可以通過其他的引用來改變變量的值。

常量指針指向的值不能改變,但是并不意味着指針本身不能改變,常量指針可以指向其他的位址

  • 指針常量是:這個指針本身是常量,不能再指向其他的位址
指針常量指向的位址不能改變,但是可以通過指針常量,來改變指針所指向的變量的值:
int a=5;
int *const n = &a;
*n = 8;
           
  • 區分常量指針和指針常量的關鍵就在于星号的位置,以星号為分界線,如果const在星号左邊,則為常量指針,如果const在星号右邊則為指針常量。

可以這樣考慮:

将星号讀作指針,将const讀作常量,從左往右讀内容正好與之相符。