常量指针 const int *p1 = &num1
const 类型 *指针名 = &常量
void test01()
{
const int num1 = 0;
const int num2 = 1;
int num3 = 2;
const int *p1 = &num1; // const int *(指向int常量类型的指针)
p1 = &num2; //编译通过
*p1 = 3;//编译失败,p指向一个常量,常量不可更改!!!
}
指针常量 int * const p2 = &num3
类型* const 常量名 = &变量名
void test01()
{
const int num1 = 0;
const int num2 = 1;
int num3 = 2;
int num4 = 3;
int *const p2 = &num1;//编译失败,类型不匹配,p2应该指向int型的变量,num1是常量
int *const p2;//编译失败 p2是常量应该定义是就赋初值
int *const p2 = &num3;//编译通过
p2 = &num4;//编译失败,p2是常量,定义赋初值后不可更改!!
}
const int * p1,const在 int* 左边,修饰int 表示整形常量,p1指向常量,p1是变量
int * const p2 ,const还是修饰左边的变量名,表示该变量不可更改即为常量
。。。绕了一圈发现const是修饰右边的(这段好像有点问题,以后再写)
const int * const p3
const int * const p3 = &num1; //编译通过
const int * const p4 = &num3; //编译通过
*p3 = 2; //编译失败
*p4 = 1; //编译失败
p3 = &num2; //编译失败
p4 = &num4; //编译失败
为什么p4的指向无法修改,p4指向的变量num3的值也无法修改呢?
const int * const p4
以 * 分界,前半段const int 表示int常量,*修饰const int 即常量指针,
第二个const修饰 p4,表示 p4 的值不可变即p4是个常量
!!!记住一句话!!! const 用于修饰紧随其后的表达式
待补充....



