C++指针常量和常量指针

  • 指针常量:指向常量的指针,也被称为底层const。这意味着你不能通过这个指针来改变它指向的对象的值,但是你可以改变指针本身的值(即它存储的地址)。例如,const int *p1是一个底层const。

  • 常量指针:本身就是常量的指针,也被称为顶层const。这意味着你不能改变指针本身的值(即它存储的地址),但是你可以改变它指向的对象的值。例如,int *const p2是一个顶层const。

    #include<iostream>
    using std::cin;
    using std::cout;
    using std::endl;
    int main() {
    	int a = 10;
    	int b = 20;
     
    	// 常量类型的指针
    	const int* p1 = &a;	
    	cout << "p1未改前的地址:" << p1 <<"---a地址" << endl;
    	cout << "*p1所指的对象值:" << *p1 << endl;// 你不能通过*p1来修改它所指向的对象的值
        //*p1 = 30;  // 错误                        但你可以改变p1的值
    	p1 = &b;  // 正确
    	cout << "p1改后的地址:" <<  p1 <<"---a地址变成b地址----地址可改" << endl;
    	cout << "*p1所指的对象值:" << *p1 << endl;
    
    	// 常量指针
    	int* const p2 = &a;//P2将一直指向A地址
    	cout << "p2的地址:" << p2 << "---a地址" << endl; // 你不能改变p2的值					 
    	cout << "*p2指针所指的对象值:" << *p2 << endl; // 但你可以通过*p2来修改它所指向的对象的值
    	// p2 = &b;  // 错误
        *p2 = 30;  // 正确
    	cout << "p2的地址:" << p2 <<"---a地址"<< endl; // 你不能改变p2的值					 
    	cout << "*p2指针所指的对象值:" << *p2 << "---指针指向的对象可改" << endl;
     
    	return 0;
    }