const 对象一旦创建后其值就不能再改变,所以const对象必须初始化.
const int *p中,const对象是*p(即*p的值是只读),而对于此句“const对象必须初始化”,一般用法中我们是要给指针p初始化,而不是给*p初始化。所以在此可以不初始化。即使在声明是进行初始化(const int* p = 0x123456),也是在对指针p初始化,等价于如下一般用法:
对此的用法一般如下:
const int *p;
p = 0x123456;(此时是在给指针p赋值,而不是给*p赋值)
int* const p中,const对象是p,此时在指针p声明时必须初始化。
一般用法:
int* const p = 0x123456;
------解决思路----------------------
遇到const修饰的指针,需要注意有两种可能:
1、指针变量指向的值无法改变
2、指针变量本身无法改变
例如:
------解决思路----------------------
(1) int *p -- p是个非const指针,指向的对象是int;
(2) const int *p -- p是个非const指针,指向的对象是const int;
(3) int * const p -- p是个const指针,指向的对象是int;
(4) const int * const p -- p是个const指针,指向的对象是const int。
const int *p中,const对象是*p(即*p的值是只读),而对于此句“const对象必须初始化”,一般用法中我们是要给指针p初始化,而不是给*p初始化。所以在此可以不初始化。即使在声明是进行初始化(const int* p = 0x123456),也是在对指针p初始化,等价于如下一般用法:
对此的用法一般如下:
const int *p;
p = 0x123456;(此时是在给指针p赋值,而不是给*p赋值)
int* const p中,const对象是p,此时在指针p声明时必须初始化。
一般用法:
int* const p = 0x123456;
------解决思路----------------------
遇到const修饰的指针,需要注意有两种可能:
1、指针变量指向的值无法改变
2、指针变量本身无法改变
例如:
int a = 10;
const int *p;
p = &a;
*p = 3; // 错误,通过此指针改变指向的值
int b = 5;
p = &b; // 正确
int c = 10;
int * const p = &c;
*p = 5; // 正确
int d = 5;
p = &d; // 错误,指针变量不能改变
------解决思路----------------------
(1) int *p -- p是个非const指针,指向的对象是int;
(2) const int *p -- p是个非const指针,指向的对象是const int;
(3) int * const p -- p是个const指针,指向的对象是int;
(4) const int * const p -- p是个const指针,指向的对象是const int。
以上四个都是定义指针p,如果初始化是指初始化指针p,而不是它所指向的对象,由于(3)和(4)中指针p是const的,所以必须初始化。(1)和(2)中的指针p是非const的,可以不初始化。
所以:
const int t =***;必须初始化,不然出现错误;
但是const int*p; 可以不初始化,在用到的时候初始化;