黑马程序员技术交流社区

标题: 以前看 const char *p, char * const p 这两个怎么破 [打印本页]

作者: llo    时间: 2015-7-21 23:12
标题: 以前看 const char *p, char * const p 这两个怎么破
以前不会 现在打算要弄会他    求大神指导
作者: 慕名黑马生    时间: 2015-7-21 23:41
就比较*和const位置,*在前说明p这个指针不能变,即它指向固定地址,*在后说明p指向的单个变量、数组等的值不能被改变,比如a=1,在第二种情况下若后面再跟a=3等等就会报错,但普通情况a为变量可以随便改变值
作者: wdcew    时间: 2015-7-22 00:07
const char *p 表示 指针p 所指向的数据不能被改变
char * const p  表示指针变量 p不会被改变;
作者: llo    时间: 2015-7-23 21:50
wdcew 发表于 2015-7-22 00:07
const char *p 表示 指针p 所指向的数据不能被改变
char * const p  表示指针变量 p不会被改变; ...

指针变量 p不会被改变 是什么意思
作者: wdcew    时间: 2015-8-1 10:57
llo 发表于 2015-7-23 21:50
指针变量 p不会被改变 是什么意思

指针变量P 存储的是地址嘛, 如果使用char* const p  ,那么 指针p存储的地址,你无法再更改,换言之,你无法再让指针 p 指向别的变量。
int a =1;
int b =2;
char* const p =a;
p = &b; //系统会报错
*p = b; //正常运行
当 换成下面代码:

int a =1;
int b =2;
const char *p =a;
*p = b;//系统报错, 因为无法修改指针p 指向的变量的数据。
p = &b;//正常运行
作者: wy911011    时间: 2015-8-1 11:37
如何使用const
(1)修饰变量
            const int a=10;

(2)修饰指针变量
           int  b=20;
           int a=10;
           const int *p=&a;       
          *p=30;             错误的    // p的指向可以改变,但是指向变量的值不能改变
       

             int  b=20;
           int a=10;
           int * const p=&a;       
           *p=30;                        //指针变量指向的变量值可以改变,指向不能变

        const  int * const p=&a    //const修饰的指针的指向和值都不能改变
       
作者: 爱生活爱程序    时间: 2015-8-1 12:47
前者*p 不可变,后者p,不可变
作者: flywithde    时间: 2015-8-1 17:20
当const在*p的左边,则其指向变量的值不能修改const修饰的是*p(*p就相当于指针所指向变量的值);若const在*和p之间,const修饰的是p,其指向不能修改(p就是指针变量)
作者: Northcity    时间: 2015-8-1 21:52
有一个简单记法   const离谁近谁就不可变




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2