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);