1. 常量指針(Pointer to Constant)
定義:
常量指針是指向一個常量數據的指針,即指針指向的內容不能通過該指針被修改。
語法:
const int* ptr;
或者:
int const* ptr;
解釋:
const
修飾的是指針指向的內容(即int
),表示指針指向的數據是只讀的。- 指針本身可以改變指向其他地址,但不能通過該指針修改所指向的值。
示例代碼:
int a = 10, b = 20;
const int* ptr = &a;// 錯誤:不能通過ptr修改a的值
// *ptr = 30; // 編譯錯誤// 正確:可以改變指針的指向
ptr = &b; // ptr現在指向b
總結:
- 指針可以指向不同的地址。
- 不能通過指針修改所指向的值。
2. 指針常量(Constant Pointer)
定義:
指針常量是一個固定的指針,指針本身的值(即指向的地址)不能改變,但可以通過該指針修改所指向的內容。
語法:
int* const ptr = &a;
解釋:
const
修飾的是指針本身,表示指針一旦初始化后,其指向的地址不能改變。- 可以通過該指針修改所指向的值。
示例代碼:
int a = 10, b = 20;
int* const ptr = &a;// 正確:可以通過ptr修改a的值
*ptr = 30; // a現在變為30// 錯誤:不能改變指針的指向
// ptr = &b; // 編譯錯誤
總結:
- 指針的指向地址固定,不能改變。
- 可以通過指針修改所指向的值。
3. 兩者的組合:指向常量的指針常量
如果同時限制指針本身的值和指針指向的內容都不能改變,可以使用以下語法:
語法:
const int* const ptr = &a;
解釋:
- 第一個
const
修飾的是指針指向的內容,表示內容不可修改。 - 第二個
const
修飾的是指針本身,表示指針的指向地址不可改變。
示例代碼:
int a = 10, b = 20;
const int* const ptr = &a;// 錯誤:不能通過ptr修改a的值
// *ptr = 30; // 編譯錯誤// 錯誤:不能改變指針的指向
// ptr = &b; // 編譯錯誤
總結:
- 指針的指向地址固定,不能改變。
- 不能通過指針修改所指向的值。
4. 總結對比
特性 | 常量指針 (const int* ptr ) | 指針常量 (int* const ptr ) | 指向常量的指針常量 (const int* const ptr ) |
---|---|---|---|
指針指向的地址是否可變 | 是 | 否 | 否 |
指針指向的內容是否可變 | 否 | 是 | 否 |