常量指針和指針常量
1、常量指針(指針可改,指針指向的對象不可改)
常量指針本質是指針,用const修飾它,表示這個指針乃是一個指向常量的指針。指針指向的對象是常量,那麽這個對象不能被更改。
表示方法:
const int * ptr
int const * ptr
int a = 5;
const int* c = &a; //合法
*c = 6; //非法
char *str1, *str2;
str1 = "abcde1234";
str2 = "bcde";
int strcmp(const char *str1, const char *str2); //表示在該函數裏不會對形參的字符串內容進行修改
2、指針常量(指針不可改,指針指向的對象可改)
變量能修改,常量不可修改。所以指針變量能改指向,指針常量不能改指向。
(1)指針常量的本質是一個常量,而用指針修飾它,那麽說明這個常量的內容應該是一個指針。另外,數組名是一個指針常量。
表示方法:
int* const ptr
(2)因為指針常量是一個常量,在聲明的時候一定要給它賦初始值。一旦賦值,以後這個常量再也不能指向別的地址。
(3)指針常量的值是指針,這個值因為是常量,所以不能被賦值。
int a;
int* const p = &a; //初始化指針常量
int* q;
p = q; //非法,把上面的const去掉就合法了
(4)雖然指針常量的值不能變,可是它指向的對象是可變的,因為我們並沒有限制它指向的對象是常量。
int a = 100;
int* const p = &a; //初始化指針常量
*p = 50; //合法
3、指向常量的指針常量(指針不可改,指針指向的對象也不可改)
指向常量的指針常量就是一個常量,且它指向的對象也是一個常量。
表示方法:
const int * const ptr
int const * const ptr
因為是一個指針常量,那麽它指向的對象當然是一個指針對象,而它又指向常量,說明它指向的對象不能變化。
const int a = 25;
const int * const b = &a; //初始化
*b = 50; //非法
int * p;
b = p; //非法
4、一個例子
比如:
int a[10];
a++; //出錯,不可修改,因為a是指針常量
常量指針和指針常量