在c语言中const常被用来修饰常量,即被赋值后无法被修改的量。const在c语言中常有一下用法。
1.修饰常量
const int a = 10;
const用法如上,整型a被const修饰,在后续无法改变a的值否则会报错。
2.修饰地址
int main()
{
int a = 0;
int b = 1;
const int* p = &a;//const修饰*p,无法通过*p改变a的值。
int* const q = &b;//const修饰q,无法给q赋新的地址。
q++;
(*p)++;
return 0;
}
该点要特别注意const的位置,不同位置有不同效果。
3.修饰函数返回值
const int test(int a,int b)//返回值
{
return (a + b);
}
const int* test(int a,int b)//返回地址
{
int c = a + b;
return &c;
}
const修饰返回值个人感觉作用不大,因为一般都要再创建一个参数去接受这个返回值,而接受返回值的变量如果没有被const修饰的话是可以改变的。
4.修饰函数参数
//传值传参:传的参数是原参数的拷贝,生命周期只在该函数中,不会影响原函数
//传址传参:传的参数是原来变量的地址,可以通过地址改变main函数的值。
int add(const int a,const int b)//传值传参
{
return (a+b);
}
int add(const int* a, const int* b)//传址传参
{
int c = *a + *b;
return c;
//return *a += *b;
//错误写法
}
int main()
{
int c = 0;
int d = 0;
int f = add(c,d);
return 0;
}
传值传参个人感觉作用也不太大,因为,a和b是c和d的拷贝,a和b的改变并不会影响main函数中c和d的值,所以我感觉用不用const修饰参数在传值传参中影响并不大。如果运用传址传参,且不想通过该函数修改参数,则务必要用const修饰。