指针常量:指针本身是常量,指针的值不能改变
常量指针:指针指向的值是“常量”(打引号表示的是不能通过指针改变指向的值,这个层面的常量,不一定要真的指向常量)
上代码和注释:
#include<iostream>
using namespace std;
int main(){
const int a=1;// const int
int b=2,c=3;
//理解:可以从右往左读,p is a,*表示"pointer to"
// 1,测试常量指针
const int *p1;// p is a pointer to int const,常量指针:指向常量的指针
p1=&b;// 不一定要指向常量
cout<<*p1<<endl;
*p1=1;//不能通过指针改变指向的值,但该值(非常量时)可以通过其他方式改变,如b=1
cout<<*p1<<endl;
// 2,测试指针常量
// p is const pointer to int,指针常量:指针本身是常量
int *const p3=&b; // 既然指针本身是常量,必须赋予初值
cout<<*p3<<endl;
p3=&c;// 指针为常量,也就不能再赋值,即指向不能变(但是指向的对象是可变的)
cout<<*p3<<endl;
// 3,既是指针常量,又是常量指针
// 根据以上可知,该指针指向不能变,也不能通过该指针取修改指向的值(其他方式允许)
const int *const p4=&b;// p is const pointer to int const
b=6;// 可以通过其他方向改变指向的值
cout<<*p4<<endl;
// 4,其他写法:int和const可以交换
// int const *p2;// p is a pointer to const int,so p2=p1
// int const *const p5;// p is const pointer to const int,so p5=p4
return 0;
}