这两个概念在学习过程中经常搞混,自己在找工作的过程中也没少遇到。下面简单讲一下这两个的区别。
指针常量:int * const p
常量指针:int const *p
就形式上来看,我对它的记忆方法是:*代表指针,const代表常量,按照顺序将其读出来就可以知道哪一个是指针常量,哪一个是常量指针。
对于指针常量来说,int *表示p的数据类型,const表示这个数据本身就是常量。指针常量的内存指向不可以进行改变,但是它指向的内容可以改变。而常量指针的内存指向可以修改,它指向的内容不可以改变。
例子:
1、指针常量
#include<iostream>
using namespace std;
void main()
{
int i = 100, j = 10;
int* const p = &i;
cout << p << endl;
cout << *p << endl;
*p = j;
cout << p << endl;
cout << *p << endl;
}
运行结果如图,如果将j的地址赋给p,那么就会报错,因为指针常量的内存指向不可以改变的。
2、常量指针
#include<iostream>
using namespace std;
void main()
{
int i = 100, j = 10;
int const* p = &i;
cout << p << endl;
cout << *p << endl;
*p = j; //错误语句,常量指针不允许对内存内容进行修改
p = &j;
cout << p << endl;
cout << *p << endl;
}
其实还有一种,就是指向常量的指针常量,如:int const * const p;,这种类型的,它指向的内存和内容都不允许被修改。