栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言 指针与const的关系

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言 指针与const的关系

1.const 和一级指针的使用

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

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

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

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

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

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

   const int* const p = &a; 
    *p = 10; //error
    p = &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; //error

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的指向

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1027095.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号