代碼如下:
#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.前後都有就是頂底混合,不能重定向也不能修改值,但直接修改所指對象的值是都可以的。