C语言中指针常量和常量指针的区别
int a = 5;
const int b = 6;
const int *c = &a; // c是指向整形变量a的常量指针
const int *d = &b; // d是指向整形常量b的常量指针
int *const e = &a; // e是指向整形变量a的指针常量
//int *const f = &b; //报错提示 无法将const int*赋值给 int *
const int *const g = &a; // g是指向整形变量a的指针常量
const int *const h = &b; // h是指向整形常量b的指针常量
printf("a:%d b:%d
*c:%d c:%d
*d:%d d:%d
*e:%d e:%d
*g:%d g:%d
*h:%d h:%d
",a,b,*c,c,*d,d,*e,e,*g,g,*h,h);
a=3;
c=&b; //改变c的指向为b c值改变 *c改变
//*c=b; //报错*c是常量
d=&a; //改变d的指向为a d值改变 *d改变
//*d=a; //报错*d是常量
//e=&b; //报错 常量指针指向无法改变
*e=2; //此时a的值已经变为2 e值不变 *e改变也就是a值改变
//g=&b; //报错指针指向无法改变
//*g=1; //报错指向的地址中的值是个常量无法改变
//h=&a; //报错指针指向无法改变
//*h=1; //报错指向的地址中的值是个常量无法改变
printf("改变后
");
printf("a:%d b:%d
*c:%d c:%d
*d:%d d:%d
*e:%d e:%d
*g:%d g:%d
*h:%d h:%d
",a,b,*c,c,*d,d,*e,e,*g,g,*h,h);