c語言中,const修飾的變量是不變的可以看做是常變量,例如:
#include <stdio.h>
int main()
{ int i=10;
int arr[i];
return 0;
}
顯示錯誤,因為數組的大小不確定。而下面一個例子就是對的,
#include <stdio.h>
int main()
{const int i=10;
int arr[i];
return 0;
}
const修飾的是不可改變的變量,所以上述中的i不能作為左值。
然後看一個稍微復雜的例子。
const int* p;
還是先去掉const 修飾符號。
注意,下面兩個是等價的。
int* p;
int *p;
其實我們想要說的是,*p是int類型。那麼顯然,p就是指向int的指針。
同理
const int* p;
其實等價於
const int (*p);
int const (*p);
即,*p是常量。也就是說,p指向的數據是常量。
於是
p+=3; //合法
*p=3; //非法,p指向的數據是常量。
那麼如何聲明一個自身是常量指針呢?方法是讓const盡可能的靠近p;
int* const p;
const右面只有p,顯然,它修飾的是p,說明p不可被更改。然後把const去掉,可以看出p是一個指向 int形式變量的指針。
於是
p+=3; //非法
*p=3; //合法
再看一個更復雜的例子,它是上面二者的綜合
const int* const p;
說明p自己是常量,且p指向的變量也是常量。
於是
p+=3; //非法
*p=3; //非法
const 還有一個作用就是用於修飾常量靜態字符串
const char *p="wet"