情况二:
修饰数组变量,即希望这个数组中的每个变量的值不被修改只能被访问。
const int
a[4]={1,2,3,4};
a[0]=0; //编译报错
情况三:
对形式参量使用const。
首先看例子:
int sum(const int
ar[],int n)
{
int i;
int total=0;
for(i=0;i
total+=ar[i]++;
return total;
}
如果采用int ar[]作为参数的话,在函数中会对其值进行修改,而程序员只希望返回其和而已,不希望修改数组中的值,此时可以使用const 修饰参数,当不小心变量被修改的时候,程序就会报错来提醒程序员,正如以上程序。
情况四:
指向常量的指针亦称常量指针。
常量指针本质是指针,常量修饰它,表示这个指针是一个指向常量的指针(变量)。指针指向的对象是常量,那么这个对象不能被更改。
而有时我们不希望指针可以随意改变我们变量的值,此时我们就可以使用常量指针,看以下程序:
#include
int
main()
{
int a=100;
const int *p=&a;
a=200;
//*p=200;
加了这句就会报错
printf("%d",a);
return 0;
}
由此我们可以看出,常量指针所指向的并非一定是常量,也可能为变量,但指针把所指向的当作常量,因此不能通过指针来修改该变量的值。但此时仍然可以将p指向其他变量。
通常把指向常量的指针用作函数参量,以表明函数不会用这个指针来修改数据。如:
void show_array(const double *ar,int
n);
情况五:
常量指针与指针常量
常量指针如之前所讲指的是指向常量的指针,指针常量是指指针本身是个常量,不能在指向其他的地址,但却可以改变所指向的变量的值。
常量指针的写法为:
const int * n;
int
const * n;
指针常量写法为:
int *const n;
干脆根据const和*的相对位置来记忆常量指针和指针常量。
情况六:
指向常量的常指针。
其实就是之前两种情况的结合,用两个const来修饰指针,如const double * const
pc=。。。;
这样这个指针既不可以更改所指向的地址,也不可以修改所指向的数据。
附加情况一:
看以下程序:
#include
int main()
{
const int a=100;
int *p=&a;
*p=200;
printf("%d",a);
return 0;
}
运行之后就会发现a的值被改变了。(尤其注意:我从《Primer Plus》这本书上,说这种写法是错误的,书上说只有非常量的地址才可以赋给普通指针,但似乎实际运行的时候只会进行警告提示,不能确定是不是编译器的问题。)