定義常量指針的語句格式為:const類型 * 變數 (或 類型 const * 變數)
如:
int i = 3;
int j = 5;
const int * p= &i;
則:
p = &j; /* 正確,p可以被重新賦值 */
*p = j; /* 錯誤,因為他改變的是p所指向的變數的值。*/
常量指針與指針常量
常量指針表示一個指針指向的變數為常量及帶有const屬性(e.x. const int *p) , 而指針常量表示一個指針本身為常量及指針本身帶有const屬性(e.x. int *const p), 常量指針指向的對象由於有const屬性, 無法直接改變, 但是指針本身值(及指針指向的記憶體地址)可以改變, 而指針常量則是指針本身有const屬性, 指針的值(及指針指向的記憶體地址)無法直接改變, 而該地址內的變數可以改變。
例子:
const char *p = "Hello, World"; //表示指針p是一個常量字元串的首地址, 指針p為常量指針
char a[20] = "Hello, World";
char *const p = a; //表示指針p本身為常量, 它將一直指向該記憶體區域直到它被釋放, 指針p為指針常量。(注意: 此時p的值雖然無法改變, 但是a的值可以改變。)
指針常量一般常用於當一個指針由始至終都指向一個對象時使用。