指针常量:
指针常量仅指向唯一的内存地址,一旦被初始化后,就不能再指向其他地址。简单说就是指针本身是常量。
但可使用解引用符:*p = 10;
声明格式:【指针类型】 const 【变量名】 如:int* const p
常量指针:
指针所指向的内容是个常量。不能使用解引用符去修改指向的内容。但指针自己本身却是个变量,
因此它仍然可以再次指向其他的内容(其他地址): p = &j;
声明格式:const【指针类型】 【变量名】 如:const int *p
指向常量的常量指针:
把指针常量和常量指针结合在一起,即指针自己本身是一个常量,它指向的内容也是一个常量。
因此,
1.不能使用解引用去修改指向的内容
2.不能重新指向新地址。
声明格式:const【指针类型】const 【变量名】
如: const int* const p5
代码简述:
#include "iostream"
using namespace std;
int main()
{
int a = 10;
int b = 20;
//普通指针:
//可以指向其他地址
int *p1 = &a;
p1 = &b;
cout<<"普通指针p1 = "<< *p1 << endl;
//可以解引用
*p1 = 100;
cout<<"普通指针p1解引用 = "<< *p1 << endl;
/*
指针常量:
指针常量仅指向唯一的内存地址,一旦被初始化后,就不能再指向其他地址:指针常量---指针本身已是常量。
声明格式:【指针类型】 const 【变量名】
*/
//声明指针常量,并初始化
int* const p2 = &a;
// p2 = &80; // error,指针常量不能再指向其他地址
cout<<"指针常量p2 = "<< *p2 << endl;
//可以对指针常量使用解引用符修改内容
*p2 = 200;//相当于a=100,解引用,修改指针常量所指向的内存空间的值
cout<<"指针常量p2解引用 = "<< *p2 << endl;
/*
常量指针:
指针所指向的内容是个常量。不能使用解引用符去修改指向的内容。但指针自己本身却是个变量,因此它仍然可以再次指向其他的内容。
声明格式:const【指针类型】 【变量名】
*/
int i = 8;
int j = 9;
//声明常量指针
const int *p3 = &i;
//*p3 = 0; //error,不能解引用去修改所指向的内容
p3 = &j; //但可以再指向其他地址
cout<<"指针常量p3 = "<< *p3 << endl;
/*
指向常量的常量指针
把指针常量和常量指针结合在一起,即指针自己本身是一个常量,它指向的内容也是一个常量。
因此它既不能使用解引用去修改指向的内容,也不能重新指向新地址。
声明格式:const【指针类型】const 【变量名】
*/
int m = 7;
int N = 10;
//声明指向常量的常量指针
const int* const p5 = &m;
//*p5 = 0; //error,不能修改指向的内容
// p5 = &N; //error,不能重新指向新地址
cout<<"指向常量的常量指针p5 = "<< *p5 << endl;
system("pause");//暂停,窗口不会一闪而过
return 0;
}
运行结果:
结语:谢谢!