1 2 3 4 5 6 7 8
/* 一、指针指向的变量的值不能变,指向可变
int x = 1; int y = 2; const int* px = &x; int const* px = &x; //这两句表达式一样效果 px = &y; //正确,允许改变指向 *px = 3; //错误,不允许改变指针指向的变量的值 */ /* 二、指针指向的变量的值可以改变,指向不可变 int x = 1; int y = 2; int* const px = &x; px = &y; //错误,不允许改变指针指向 *px = 3; //正确,允许改变指针指向的变量的值 */ /* 三、指针指向的变量的值不可变,指向不可变 int x = 1; int y = 2; const int* const px = &x; int const* const px = &x; px = &y; //错误,不允许改变指针指向 *px = 3; //错误,不允许改变指针指向的变量的值 */ /* 四、补充 1、const在*的左边,则指针指向的变量的值不可变;在*的右边,则指针的指向不可变。 简记“左定值,右定向”。 2、以下编译出错(gcc 4.4.5) int x = 1; (int*) const px = &x; int x = 1; const (int*) px = &x; 3、 在c中,对于const定义的指针,不赋初值编译不报错; 即int* const px;等不会报错; 但是,在C++中,上面二、三两种情况必须赋初值,一可以不赋初值; 即int* const px;const int* const px;报错,const int* px;不报错, 必须初始化指针的指向int* const px = &x;const int* const px; 强烈建议在初始时说明指针的指向,防止出现野指针。 */
/* 二、指针指向的变量的值可以改变,指向不可变
int x = 1; int y = 2; int* const px = &x; px = &y; //错误,不允许改变指针指向 *px = 3; //正确,允许改变指针指向的变量的值 */
//错误,不允许改变指针指向
//正确,允许改变指针指向的变量的值
/* 三、指针指向的变量的值不可变,指向不可变 int x = 1; int y = 2; const int* const px = &x; int const* const px = &x; px = &y; //错误,不允许改变指针指向 *px = 3; //错误,不允许改变指针指向的变量的值 */ /* 四、补充 1、const在*的左边,则指针指向的变量的值不可变;在*的右边,则指针的指向不可变。 简记“左定值,右定向”。 2、以下编译出错(gcc 4.4.5) int x = 1; (int*) const px = &x; int x = 1; const (int*) px = &x; 3、 在c中,对于const定义的指针,不赋初值编译不报错; 即int* const px;等不会报错; 但是,在C++中,上面二、三两种情况必须赋初值,一可以不赋初值; 即int* const px;const int* const px;报错,const int* px;不报错, 必须初始化指针的指向int* const px = &x;const int* const px; 强烈建议在初始时说明指针的指向,防止出现野指针。 */
/* 三、指针指向的变量的值不可变,指向不可变
int x = 1; int y = 2; const int* const px = &x; int const* const px = &x; px = &y; //错误,不允许改变指针指向 *px = 3; //错误,不允许改变指针指向的变量的值 */ /* 四、补充 1、const在*的左边,则指针指向的变量的值不可变;在*的右边,则指针的指向不可变。 简记“左定值,右定向”。 2、以下编译出错(gcc 4.4.5) int x = 1; (int*) const px = &x; int x = 1; const (int*) px = &x; 3、 在c中,对于const定义的指针,不赋初值编译不报错; 即int* const px;等不会报错; 但是,在C++中,上面二、三两种情况必须赋初值,一可以不赋初值; 即int* const px;const int* const px;报错,const int* px;不报错, 必须初始化指针的指向int* const px = &x;const int* const px; 强烈建议在初始时说明指针的指向,防止出现野指针。 */
//错误,不允许改变指针指向的变量的值
int* const px;等不会报错;
即int* const px;const int* const px;报错,const int* px;不报错, 必须初始化指针的指向int* const px = &x;const int* const px;
const int* const px;
const int* px;不报错,