1. 我们知道,指针可以根据它包含的地址访问到变量值,而且也可以改变它所指的变量的值。
但是,我们也可以声明这样的指针:能访问到它所指的值,但不能改变所指的这个值。
为了达到这样的目的,我们可以这样做:声明指针所指的类型为 const。例如:
int x ;
int y = 10;
const int* p = &y;
x = *p; //ok:reading p
*p = x; //出错,*p 是常量,不能被改变
这里,最初表达式 &y 是 int* 类型,但被赋值给类型为 const int* 类型的指针。我们要注意:指向非常量的指针可以被隐式转换成指向常量的指针。
但是反过来却不行。
一个使用这种指向常量元素的指针例子是,它作为函数的参数:这时,函数就不能改变这种指针传过来的变量值了。
#include <iostream>
using namespace std;
void increment_all (int* start, int* stop)
{
int * current = start;
while (current != stop)
{
++(*current); //指针指向的值增加
++current; //指针本身增加
}
}
void print_all (const int* start, const int* stop)
{
const int * current = start;
while (current != stop) {
cout << *current << ‘\n‘;
++current; //指针本身增加
}
}
int main ()
{
int numbers[] = {10,20,30};
increment_all (numbers,numbers+3);
print_all (numbers,numbers+3);
return 0;
}
输出: 11
21
31
函数 print_all 使用了指向常量元素的指针,print_all 中指针所指向的常量是不能被改变的,但 print_all 中的指针本身并不是常量,所以指针的值可以改变。2. 指针本身也可以是常量,声明方法是在符号 * 后加 const,下面几个语句:
int x ;
int* p1 = &x;
const int* p2 = &x; //指向常量的指针
int* const p3 = &x; //常量指针指向非常量值
const int* const p4 = &x;
//常量的指针指向常量值
在应用中,const 和 指针(printer)的混合使用不容易被掌握,但只要多加练习,积累经验,也可熟练的使用最合适的类型进行使用。
3.
const int* p2 = &x;
int const* p2 = &x;
这两个语句是等价的,都是指向常量的指针。const 放在 int 的前面 或者 int 放在 const 的前面,两种表达的方式也经常被讨论,但记住两者是等价的。
指针知识(五):指针(pointer)和常量(const),布布扣,bubuko.com
原文:http://www.cnblogs.com/guozqzzu/p/3595400.html