1、指针常量——指针类型的常量

在指针常量中,指针自身的值是一个常量,指针变量不允许修改。如同次指针指向一个地址该地址不能被修改,但是该地址里的内容可以被修改定义格式如下:

int *const a=5;
或
int a,b;
int * const p=&a ;
p=&b;//操作错误

例: 

#include <iostream>
using namespace std;
int main()
{
    int a = 3;
    int m[2] = { 1, 2 };
    int *const c = &a;//指针常量
    cout << "c的地址:" << c << "c的值:" << *c << endl;
    c[0]=m[0];//改变地址的内容是合法的
    cout << "c的地址:" << c << "c的值:" << *c << endl;
}    

 地址没有改变,内容可以改变,输出如下:

2、常量指针——指向“常量”的指针 

常量指针本质上是一个指针,常量表示指针指向的内容,说明该指针指向一个“常量”。在常量指针中,指针指向的内容是不可改变的,指针看起来好像指向了一个常量。

int a = 1, b = 2;
const int *p = &a;//等价于int const*p=&a;
p = &b; // 指针可以指向其他地址,地址可以改变,内容不可改变

例:

 

#include <iostream>
using namespace std;
int main()
{
    int a = 3;
    int m[6] = {0,2,3,6,9,5};
    int const *c = &a;//const int*c = &a;常量指针
    cout << "c的地址:" << c << "   "<<"c的值:" << *c << endl;
    c = &m[3];//可以改变指向地址,不能改变内容(*c=m[3]操作错误)
    cout << "c的地址:" << c << "   " << "c的值:" << *c << endl;
}
    

 

 运行结果如下: