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"