const修饰符
使用const修饰变量时,该变量的值不可修改,因此需要初始化。
例如 const int s = 0;
此时s为值不可变的变量。
那么基于此,当const修饰指针时的情况有三种:
(1)const int *p;
此时const修饰的是 *p 而非 p,因此,*p的值不可变,而p的值是可变的,所以可不对p进行初始化。
例如,
int s = 0,t = 1;
const int *p;
p = &s;
cout<<*p<<endl;
p = &t;
cout<<*p<<endl;
以上代码输出:
0
1
但此时,无论p指向s或者t,均不能通过 *p 修改p所指向的变量的值,如*p = 2;(这是错误的,因为const修饰了*p,此时*p不可变)
(2)int *const p = &s;
此时*的位置在const的前面,而const直接修饰p,那么p的指向就是固定的,不可变化,因此一定需要初始化。
但此时,仍可通过*p修改p所指向的变量的值。
例如,int s = 0;
int * const p = &s;
cout<<*p<<endl;
*p = 3;
cout<<*p<<endl;
以上代码输出为:
0
3
(3)const int *const p = &s
这种情况下,无论是p还是*p均不可变,因此一定需要初始化。
第三种情况其实是前两种情况的结合体,就不具体分析了。
时间: 2024-10-24 15:01:39