C语言 指针与const的关系

1.const 和一级指针的使用

    int a = 0, b = 0;const int *p = &a;*p = 10; // errorp = &b; // right

 const放在指针的前面,修饰p的指向内容不能做修改。

  const修饰的就是*p,实际上就是对p进行解引用,也就是a,那么在这里a是一个常量,也就是说,限定p指向的内容不允许被修改,但不限定p的指向,p可以指向a,也可以指向b。

 int* const p = &a; *p = 10; //rightp = &b;  //error

const放在指针的后面,修饰p变量本身,p的值不能做修改。

const修饰的是p,p为常量,p指向的是a,此时p就不能指向b。但是通过对p解引用,也就是a是一个变量,p的指向内容可以被修改,p本身不能修改。

   const int* const p = &a; *p = 10; //errorp = &b;//error

这种情况就是const既限定了p本身,又限定了p的指向内容,所以通过*p(指向内容),p(本身)都不能进行修改。

   const int a = 0;const int b = 0;int *p = &a; //error

假设int *p = &a正确,那么就可以通过*p去改变a的值,但在这里,a明显是一个常量,因此这样的写法是错误的。如果需要将其改正确,对*p进行限定就可以了。

    const int a = 0;const int b = 0;const int *p = &a; 

2.const和二级指针的使用

   int a = 0;int b = 0;const int *p = &a; // 不能通过*p来修改值int *const q = &a; // q本身被限定,不能被修改int **s1 = &p;     s1 = &q;   //s1关联q **s1 = 20; // s1解两次引用,也就是间接修改a的值,a的值没有被限定const int **t1 = &p; //const修饰**t1,不能通过**t1来修改a的值*t1 = &b;//right  通过*t1修改p的指向**t1 = 10;//error const修饰**t1,不能通过**t1来修改a的值int *const * s2 = &p; //const限定*s2,不能通过*s2改变p的指向*s2 = &a;  //error 不能通过*s2改变p的指向,这里偏要改,这显然是错的**s2 = 100; // **s2不被限定,所以可以修改
const int a = 0; //const修饰a,a的值不能修改
int b = 0;
const int *p = &a; //const修饰*p,不能通过*p来修改a的值
p = &b;// right  p的指向不被限定,可以修改
*p = 10;//error
const int *const *s = &p; // **s和*s都被限定,不能通过**s,*s进行修改
*s = &a;//error
**s = 10;//error
int **const t = &p;//error   p本身是一个const int* 类型,定义p的二级指针,首先类型得相同 const int* *t = &p;
const int* *t = &p;
**t = 10;//error **t被限定
*t = &a;//right 修改p的指向


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部