在学习const修饰时,遇到了一些疑问,在ai帮助下我理清了一点,于是我将他作为笔记记录。

首先,const在修饰普通变量时会使变量具有常属性,此时a为常变量

const int a = 10;

注意,此时的a是只读的,若使用指针变量指向a,并用解引用操作符+p访问修改a的值是不安全的,因为指针会丢弃const属性,编译器可能会警告或报错;

屏幕截图 2026-08-13 094729

  使用指针修改常变量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,暂时就这么多。

posted on 2026-08-13 10:16  mm77777  阅读(4)  评论(0)    收藏  举报