int a = 0;
a = 2;//此时变量a可以被修改
const int b = 0;
b = 2;//此时b不能被修改上述代码中n是不能被修改的,其实a本质是变量,只不过被const修饰后,在语法上加了限制,只要我 们在代码中对n就⾏修改,就不符合语法规则,就报错,致使没法直接修改a。
但是如果我们绕过a,使⽤a的地址,去修改a就能做到了,虽然这样做是在打破语法规则。
int main()
{
const int a = 0;
int*p = &a;
*p = 1;
printf("%d\n", a);
}首先我们先去分p和*p的含义
int a = 0;
int *p = &a;
*p = 1;1.p里面存放的是a的地址 2.p本身是变量有自己的地址 3.*p是p指向的空间,即a(通过p找到a)

const修饰指针变量时分为两种情况,可以简单地区分为const关键词在 * 的左边或右边
//在*左边
const int* p
int const* p
//在*的右边
int* const pconst放在*左边时限制*p,不能通过指针变量p来修改p指向空间的内容;*p = 2 err 但p = &b 是正确的,因为p不受限制
int a = 1;
int b = 2;
const int* p = &a;
*p = 2;//err
p = &b;
printf("%d\n", a);此处需要注意的是,将b的地址赋给p变量,*p指向的空间变为b的空间,a的值未得到改变但*p的值得到了改变
const放在*右边时限制p变量,p变量不能被修改,没办法指向其他变量,但还可以通过p来修改p所指向的对象的内容
int a = 1;
int b = 2;
int*const p = &a;
*p = 2;
//p = &b;err
printf("%d\n", a);这里是直接对p指向的空间进行修改,a的值得到了改变,p本身的地址从未发生改变