c/c++ const

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;

强烈建议在初始时说明指针的指向,防止出现野指针。
*/


原文地址:https://www.cnblogs.com/helloweworld/p/2683081.html