C++ const指针(const修饰指针)详解
const 是一个常量修饰符,使用 const 修饰一个变量时,该变量的值就不允许改变了。
例如:
const 限制指针变量本身的语法格式如下:
const限制指针所指数据的语法格式如下:
如下的程序演示了 const 限制指针所指的数据:
注意,虽然不能通过 pa 改变它所指的数据,但 b 变量本身是能修改的,通过 pa 修改 b 的值和直接修改 b 的值是两码事。
例如:
例如:
const int num = 5; num = 10; // 错误,num 的值不能修改const 也可以用来修饰指针变量,它既可以限制指针变量本身,也可以限制指针指向的数据。
1、const限制指针变量本身
所谓 const 限制指针变量本身,既指针变量的值不允许改变,也就是指针的指向不允许改变。const 限制指针变量本身的语法格式如下:
类型 * const 指针变量名;例如:
int a; int * const p = &a;这样定义的指针 p,它的指向不能改变,比如说:
*p = 1; // 正确,修改指针指向的数据 int b; p = &b; // 错误,指针的指向不能改变因为不能修改指针的指向,所以在定义的时候必须为指针设置一个初值。下面的定义是错误的:
int * const p; // 错误,指针没有初值
2、const限制指针指向的数据
用 const 限制指针指向的数据,既指针变量本身是可以改变的(指针的指向可以改变),但指针不能修改它指向的数据。const限制指针所指数据的语法格式如下:
const 类型 * 指针变量名; 类型 const * 指针变量名;例如:
const int *p; int const *p;在上面的定义中,* 表明 p 是一个指针变量,int 表明 p 是一个指向整型数据的指针,而 const 则限制指针不能修改它所指的数据。
如下的程序演示了 const 限制指针所指的数据:
int a = 0, b = 0; const int* pa = &a; // 定义 const 指针,令其指向 a。 pa = &b; // 正确,pa 的指向可以改变 *pa = 1; // 错误,pa 不能修改它指向的数据 b = 2; // 正确,变量 b 的指可以改变。在上面的代码中,试图修改 *pa 是错误的,因为 const 限制指针不能修改它所指的数据。
注意,虽然不能通过 pa 改变它所指的数据,但 b 变量本身是能修改的,通过 pa 修改 b 的值和直接修改 b 的值是两码事。
3、const限制指针本身和它所指的数据
上面讲述了 const 在两个位置的不同效果,const 还可以同时出现在这两个位置,其定义格式为:const 类型 * const 指针变量名;这是前面两种情况的组合,指针变量的指向不能改变,同时指针也不能修改它所指的数据。
例如:
int a = 0, b = 0; const int* const p = &a; *p = 1; // 错误,指针不能修改它所指的数据 p = &b; // 错误,指针的指向不能改变