在学习const修饰时,遇到了一些疑问,在ai帮助下我理清了一点,于是我将他作为笔记记录。
首先,const在修饰普通变量时会使变量具有常属性,此时a为常变量
const int a = 10;
注意,此时的a是只读的,若使用指针变量指向a,并用解引用操作符+p访问修改a的值是不安全的,因为指针会丢弃const属性,编译器可能会警告或报错;

使用指针修改常变量a会警告或报错,那么直接修改就更不可能通过了,毕竟const修饰的a此时是只读的。
此外,const也可修饰指针变量。const修饰指针变量有两种。根据理解我通常用int的位置区分它们(假设指针指向int类型变量,当然其他类型也行);
第一种是const在int左边,此时可以改变p的值,不可以改变*p的值
int a = 10; const int *p = &a;
在这个地方我曾经有过误解,这里的*不是只是用来告诉编译器这是指针变量吗,为什么使用*p会报错呢,难道这里的const就是修饰*p吗。其实并不是,这里的const修饰的是基类型int,说明p指向的变量是const int类型,
值得注意的是,这里的const是用来约束指针变量的,若是想修改变量a,可以直接通过赋值操作修改,但是如果a也被const修饰,则不能直接修改。
第二种则是const在int右边,此时可以改变*p的值,不可以改变p的值
int b = 10; int * const p = &b;
这种情况没什么好说的,此时const修饰的是指针变量p,自然就不能修改p。
其实还有一种
int b = 10; const int * const p = &b;
这种情况下,无论是p还是*p都是不允许被修改的。
OK,暂时就这么多。
浙公网安备 33010602011771号