总结:
1、常变量指针可以指向普通变量和常变量,但是都不能改变所指向的变量的值
2、普通变量指针只能指向普通变量。
3、当函数形参与实参都为指针时,规则也一样:
1)形参为普通变量指针,实参为常变量指针,则普通变量指针指向常变量,这样是不合法的。
2)形参为常变量指针,实参为普通变量指针,则常变量指针指向普通变量,合法,但不能修改普通变量值。
3)形参为常变量指针,实参为常变量指针,则常变量指针指向常变量,合法,但不能修改普通变量值。
class Student{
public :
int age;
int num;
Student(int a,int b){
age = a;
num = b;
}
};
void main(){
//常变量只能由常指针指向
int const ci = 1;
int const *cip = &ci;
//int *ip = &ci; 普通指针不能指向常变量
//常变量指针指向普通变量,不可以改变普通变量值
int const *ci2;
int nci = 2;
ci2 = &nci;
//*ci2 = 3; 出错
Student const *std1; //定义指向对象的常指针变量,即常指针,使指针一直指向同一对象
const Student *std3; //定义指向常对象的指针变量,即指向的对象为常对象,不能通过指针改变对象值,但可以改变指针指向的值
Student std2(1,2);
Student std4(3,4);
std1 = &std2;
std3 = &std4;
std3 = &std2;
//std1->age = 20; 不合法,无法通过指针修改对象
//std3->age = 10; 不合法,无法通过指针修改常对象
std1->display();
}