#include "stdafx.h"
int main()
{
int me=1,my=2,mine=3;
printf("me:%d\n", me);
printf("&me:%d\n\n",&me);
printf("my:%d\n", my);
printf("&my:%d\n\n", &my);
printf("mine:%d\n", mine);
printf("&mine:%d\n\n", &mine);
const int* p1 = &me;//p1可变,*p1不可变,此时不能用*p1来修改,但是p1可以转向
printf("p1:%d\n", p1);
printf("*p1:%d\n", *p1);
printf("&p1:%d\n\n", &p1);
int* const p2 = &my;//p2不可变,*p2可变,此时允许*p2来修改其值,但是p2不能转向。
printf("p2:%d\n", p2);
printf("*p2:%d\n", *p2);
printf("&p2:%d\n\n", &p2);
const int* const p3 = &mine;//p3不可变,*p3也不可变,此时既不能用*p3来修改其值,也不能转向
printf("p3:%d\n", p3);
printf("*p3:%d\n", *p3);
printf("&p3:%d\n\n", &p3);
p1 = p2;
printf("p1:%d\n", p1);
printf("*p1:%d\n", *p1);//p1转向了,因此,*p1的值有了改变
printf("&p1:%d\n\n", &p1);
*p2 = *p3;
printf("my:%d\n", my);
printf("p2:%d\n", p2);
printf("*p2:%d\n", *p2);//使用*p2修改了值
printf("&p2:%d\n\n", &p2);
///
#if 0 //验证!!!
p1 = p2;//可变,正确
p2 = p1;//不可变,错误
p3 = p2;//不可变,错误
*p1 = *p2;//不可变,错误
*p2 = *p1;//可变,正确
*p3 = *p2;//不可变,错误
#endif
while (1);
return 0;
}
const指针可以接受const和非const地址,但是非const指针只能接受非const地址。所以const指针的能力更强一些,所以尽量多用const指针,这是一种习惯。