代码如下:
#include "stdafx.h"
#include <iostream>
using namespace std;
int main(){
int a = 1,b=10;
/*
*1.顶层指针
*即指针本身是一个常量,
*不能重定向指针指向,但可以通过指针修改指针指向的变量值
*/
int *const p = &a;
//p = &b; 错误,不能重定向p指针指向
*p = 4;//正确,可以修改指向的变量值
a = 2; //正确,可以修改a值
/*
*2.底层指针
*即指针指向对象是一个常量,
*可以重定向指针指向,但不可以通过指针修改指针指向的变量值
*/
const int *p1 = &a; //与int const *p1 = &a声明等价
// *p1 = 5;错误,不能通过p1修改所指对象的值,因为*p1为常量
a = 5; //正确,可以修改a值
p1 = &b; //正确,可以指针重定向
/*
*3.顶底层混合指针
*即指针本身是一个常量,而且指向对象也为常量
*不但不能重定向指针指向,并且不允许通过指针修改指针指向的变量值
*/
const int *const p3 = &a;
//重定向指针指向和改变指针所指对象的值都不行
// p3 = &b;
//*p3 = 6;
a = 3; //仅能修改a值
system("pause");
return 0;
}
小结:
1.const出现在*后,就是顶层,顶层const指针本身为常量,不能重定向,但能通过*p修改值。
2.const出现在*前,就是底层,底层const指针所指对象为常量,可以指针重定向,但不能通过*p修改值。
3.前后都有就是顶底混合,不能重定向也不能修改值,但直接修改所指对象的值是都可以的。