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
,两种情况。前者表示指针所指向的内存地址的值不可变,后者表示指针的指向不可变;