有些时候我们希望定义一个变量的值不被修改,就在前面加上const,这样假如不小心在程序中改变了值的话,编译的时候就会提示或者报错,如果希望定义一个地址不被修改的指针,那就在类型的右边加上CONST
int sum(float *a){
*a =5.8;
}
int main()
{
const float pi =3.14;// 告诉编译器该变量的值是不能被修改的,
pi =4;//编译报错;
sum(&pi);//编译的时候会提示发出警告,告诉你pi是一个CONST 这样传地址是在丢弃CONST
//使用const关键字保护数组,如果后面程序尝试改变数组元素的值,编译器将生成一个错误,
const int days[12]={31,28,31,30,31,30,31,30,31,30,31,30};
int a[5]={1,2,3,4,5};
const int *pd=a;//指向const的指针*pd不能用于改变值,
*pd =55;//不允许
pd[2]=33;//不允许
a[0]=100;//允许,因为a没有被const限定
//pd =&a[3]//允许改变指针指向别的地址
int const *p=a;//定义了一个指针的地址不可修改的指针;
P=&a[0]//不允许改变地址
*P=12;//允许这是改变值所以允许
p[1]=13;//允许也是改变值是可以的
const int const*p1=a;//地址和值都不能修改的指针
}
void add_to(const double ar[],int n,double val)
{
/*该函数是告诉编译器,不能修改ar数组中的值 */
/*如果不小心使用 ar[i]++的表达式,编译器就会捕捉到这个错误*/
/*假如不小心重新定义个指针指向了这个const数组,编译会捕捉到Warning,但是可以运行这里需要注意*/
/*所以这里一定要理解,这里使用const并不是要求原数组是常量,
而是该函数处理数组时将其视为常量,不可更改,也就是是说不可以使用ar来改变数组的值,
所以在定义变量或者函数的的时候,不想别改变原来的值就加上CONST,告诉别人,我是不会改变你的值的*/
double *a =ar;//这里就定义一个指针指向了数组的首地址,这样是错误的做法
for (int i=0;i<n;i++)
{
a[i]+=val;//这样运行程序就串改了原有数组的值,这是我们不希望的
ar[i]+=val;//编译的时候会报错,因为ar是const 不能通过ar改变数组的值;
}
}