①注意一下:
往往中文属于里形式如AB ,那么A是描述,B是本质。
比如 数据库管理系统 数据库管理是描述 系统是本质
比如 函数指针 函数是描述 本质是指针,这个指针指向函数地址
(那本质和描述的区别是?描述变了还是同一大类,本质变了就不是同一大类了)
②言归正传:
常量指针,也就是本质是指针,什么样的指针呢?常量类型的指针,什么叫常量类型的指针呢?
回忆一下函数指针,指向函数地址的指针。
那么常量指针,就是指向常量类型地址的指针。
比如const int * p;
而指针常量,本质是常量。
什么类型的常量?指针类型的常量,为了能够有个术语结构上的对比,你肯定知道整型常量,也知道是这么定义的:const int a;
但指针常量,是这么定义的 : int * const a;
const 在 *前面,是常量指针,const在*后面,是指针常量。
③这二者的区别就是:
const int *p 指向的是 const int a=2;的&a;p可以变化但是*p不可以变化。
而int * const p=&a; 意思是描述的是p,p不可变,就如const int a=2; a的值就不能再改变了。那么p不可以变,但是*p可以变。
还有一种是 综合一起的,const int * const p=&a; 这种一旦确定值,*p和p都不能变化。
#include<iostream>
using namespace std;
int main()
{
int i = 2;
int j = 2;
const int *a = &i; //常量指针,指针内容不可变,地址可变
a = &j;
*a = j;//error
cout << *a << endl;
int *const b = &i;//指针常量,指针地址不可变,内容可变
*b = j;
b = &j;//error
system("pause");
return 0;
}