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"