1.const修饰变量
const关键字是constant的缩写,翻译为常量、常数。
通常由const修饰的变量不可修改。
int main()
{
const int a = 10;//a具有了常属性(不能被修改了)
//a 是不是常量呢?虽然a是不能被修改的,但是本质上还是变量
//常变量
//
a = 20;
//在C++ 中const修饰的变量就是常量
//
int arr[a];
printf("%d\n", a);
return 0;
}
从上述中我们可知尽管变量a被const所修饰,但只是具有了常属性,其本质仍然是变量。
但是我们可以间接修改a的值,如下
int main()
{
const int a = 10;
//a = 20;//err
int* p = &a;
*p = 0;
printf("a = %d\n", a);
return 0;
}
即通过指针访问a的地址来修改a的值。
2.const修饰指针(左址右值)
2.1 const在*的左边
我们可以知道p中存放了一个地址,则*p可以访问该地址对应的值,同时p也有一个属于自己的地址
const 修饰指针变量时,放在*的左边,限制的是指针指向的内容,不能通过指针来修改指向的内容,但是可以修改指针变量本身的值(修改的指针变量的指向)。
int main()
{
int a = 10;
int b = 20;
int const * p = &a;
p = &b;//ok
*p = 100;//err
//const 修饰指针变量时,放在*的左边,限制的是指针指向的内容,不能通过指针来修改指向的内容
//但是可以修改指针变量本身的值(修改的指针变量的指向)
return 0;
}
2.2 const 在*的右边
const 修饰指针变量的时候,放在*的右边const 限制的是指针变量本身,指针变量不能再指向其他变量了,但是可以通过指针变量,修改指针变量指向的内容
int main()
{
int a = 10;//&a--0x0012ff40
int b = 20;//&b--0x0012ff44
int * const p = &a;//0x0012ff40
p = &b;//err
*p = 100;
printf("%d\n", a);
//const 修饰指针变量的时候,放在*的右边
//const 限制的是指针变量本身,指针变量不能再指向其他变量了
//但是可以通过指针变量,修改指针变量指向的内容
//
return 0;
}
3.const修饰函数参数
#include<stdio.h>
int myFunc(const int* p)
{
*p = *p + 1;
return *p;
}
const修饰函数参数,对参数起到限定的作用, 但是通过指针也能修改其值。