请稍侯

C语言中const关键字使用总结

05 December 2020

C语言中const关键字使用总结

const关键字修饰的意义:

  • 只修饰变量,不修饰其他关键字;
  • 被修饰的部分不可变;
  • 但是不会改变变量的作用域和生命周期。

下面用几个例子来说明
案例1:

const int *p = &a

复制代码此时 const 修饰的是 *p*p 的意义是指针所指向的内存地址的值,所以此时的意思是指针 p 所指向的内存地址的值不可变;而指针 p的值,也就是其指向的内存地址可变; 所以当尝试使用 *p 改变被 const 修饰的常量时,编译器报错,只读的变量不可以被再次赋值,而修改指针 p 的指向时是可行的。

案例2:

int const *p = &a;

const 不修饰关键字,此时const修饰的仍然是 *p,同案例1;

案例3:

int *const p = &a;

此时 const 修饰的是变量 p,也就是局部变量 p 的值不能被改变,所以当尝试使用 *p 改变 p 所指向的内存地址a中的值时,是可行的。但是当尝试重新给 p 赋值,比如让其指向 b 的内存地址时,编译器就会报错。

案例4:

int const c = 8;
const int c = 8;

这中情况同情况一和情况二一样,都是修饰变量 c,也就不存在指针那么复杂的情况,其意义就是变量 c的值不可变。

总结

  • const 修饰基础数据时表示变量不可变;
  • 修饰指针时,可以分为修饰 const *p* const p,两种情况。前者表示指针所指向的内存地址的值不可变,后者表示指针的指向不可变;