前言:
我们在平时写调用函数传参的时候,有时候不经意间就会犯一些错误,比如说左右值赋值错误,或者重新赋值。
这种情况,我们最好使用const修饰一下,经过const修饰的时候,在我们错误使用的时候,编译器就会提前报错来提醒我们。所以说const使用得当对我们的帮助是非常大的。
我们来看一组代码
int main()
{
int n = 10;
int m = 100;
int* p = &n;
*p = 20;
printf("%d ", n);
return 0;
}
我们看到执行结果,指针p通过解引用修改了n的数据,那我想说,如果我们不希望n被修改怎么办?
int main()
{
int n = 10;
int m = 100;
const int* p = &n;
*p = 20;
printf("%d ", n);
return 0;
}
我们看到,如果用const修饰 *p 之后。编译器就报错来提醒我们。
但是这里要注意了,虽然const 修饰了(*p) 但是指针 (p)仍然是可以修改的!
int main()
{
int n = 10;
int m = 100;
const int* p = &n;
p = m;
printf("%d ", n);
return 0;
}
上面代码虽然有const修饰,但我们仍然可以修改p指针指向的空间,如何让p的指向不变并且*p空间的数据不能修改呢,让我们看下面代码
int main()
{
int n = 10;
int m = 100;
const int* const p = &n;
*p = 20;
p = m;
printf("%d ", n);
return 0;
}
通过两个const一个修饰*p一个修饰p就完全使他变为不可修改!!!
总结:
const 修饰总体理解起来并不难,但是还是有一些细节需要我们注意一下