黑马程序员技术交流社区

标题: const char *p与char * const p 什么不同?哪个可以改变? [打印本页]

作者: 李鹏-ios    时间: 2014-4-29 08:34
标题: const char *p与char * const p 什么不同?哪个可以改变?
本帖最后由 李鹏-ios 于 2014-5-15 15:02 编辑

如标题所示,const char *p与char * const p 什么不同?哪个可以改变的?
作者: gmadong@163.com    时间: 2014-4-29 08:55
看看这个
const意味着只读”,下面的声明都是什么意思?
const int a;
int const a;
const int *a;
int * const a;
int const * a const;  
前两个的作用是一样,a是一个常整型数。第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)。第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)


作者: gaoxinglei123    时间: 2014-4-29 10:29
const char *p等价于char const *p是指*p指向的内容为常量。char类型的。char * const p是指指针变量p为常量。即p变量储存的地址不能修改
作者: 李鹏-ios    时间: 2014-4-29 10:50
gaoxinglei123 发表于 2014-4-29 10:29
const char *p等价于char const *p是指*p指向的内容为常量。char类型的。char * const p是指指针变量p为常 ...

char * const p 在程序中这种有什么实际作用吗?谢谢
作者: 李鹏-ios    时间: 2014-4-29 10:51
gmadong@163.com 发表于 2014-4-29 08:55
看看这个
const意味着只读”,下面的声明都是什么意思?
const int a;

能举个实际运用的例子吗?大体意思懂了,还是有点模糊。谢谢!
作者: 星河鹭起    时间: 2014-4-29 13:56
const int *p
首先const 修饰的是整个*p。所以*p是常量,是不能被赋值的。
其次,p前并没有用const 修饰,所以p是指针变量,能被赋值重新指向另一内存地址的

int *const p
1)p因为有了const 的修饰,所以只是一个指针常量:也就是说p值是不可修改的。
2)整个*p的前面没有const 的修饰。也就是说,*p是变量而不是常量,所以我们可以通过*p来修改它所指内存i1的值.

总结:
如果const 修饰在*p前,则不能改的是*p(即不能类似这样:*p=50;赋值)而不是指pi。
如果const 是直接写在p前,则p不能改(即不能类似这样:p=&i;赋值)。




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