博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C指针-const char* p到底是什么不可以改变
阅读量:5306 次
发布时间:2019-06-14

本文共 993 字,大约阅读时间需要 3 分钟。

char a = 'w';char b = 'q';const char*  p = &a;p = &b;printf("%c",p[0]);

 如上一段代码,最终代码输出q。不是有const修饰嘛?为什么仍然可以改变哪?

指针存在的价值在于让我们修改。如一下代码:会报一个警告deprecated conversion from string constant to 'char*' [-Wwrite-strings]

char *msg;	msg = "hello";

 因为指针是修改,char *背后的含义是:给我个字符串,我要修改它。所以应该给msg赋值一个地址,而不是一个常量字符串。如果确实给msg一个常量字符串,则会出现莫名错误,在Eclipse下自己退出,如下程序,是无运行的。

char *msg;    msg = "hello";    msg = "good-bye";    *msg = 'w';

好,接着说const的问题。const char* p = &a;这句话的意思是*p指向&a,且*p有只读权限,不能通过*p修改a的内容。当然仍然可以通过a直接修改内容。

const char*  p ;p = &a;a = 'k';//p = &b;//*p='k';printf("%c",p[0]);

所以,const的问题是,值通过指针对内存有什么样的操作权限。char*p,可以做任何操作。const char *p 对这一块内容只能读。

 

 

 对于char **pp,pp的类型为指向char型的指针的指针;
 而const char ** cpp呢,根据前面关于const的说明,这里的const仍然是修饰的是char,那么cpp的类型为指向const char型的指针的指针。因此pp和cpp完全是两个不同的类型的指针,所以会产生warning。
 
char * const *cpp 与 const char ** cpp,类型完全不同。后者前面已经说了。前者的类型为,指向char的常量指针的指针。也就是cpp的类型为指向常量T3的指针,而T3为指向char 型的指针。这时cpp与pp的指向的类型仅限于限定符的不同,因此可以将pp赋给cpp。
 

 

转载于:https://www.cnblogs.com/z497688734/p/4771584.html

你可能感兴趣的文章
vue.js基础
查看>>
电脑的自带图标的显示
查看>>
[转载] redis 的两种持久化方式及原理
查看>>
C++ 删除字符串的两种实现方式
查看>>
ORA-01502: 索引'P_ABCD.PK_WEB_BASE'或这类索引的分区处于不可用状态
查看>>
Java抽象类和接口的比较
查看>>
开发进度一
查看>>
MyBaits学习
查看>>
管道,数据共享,进程池
查看>>
CSS
查看>>
[LeetCode] 55. Jump Game_ Medium tag: Dynamic Programming
查看>>
[Cypress] Stub a Post Request for Successful Form Submission with Cypress
查看>>
程序集的混淆及签名
查看>>
判断9X9数组是否是数独的java代码
查看>>
00-自测1. 打印沙漏
查看>>
UNITY在VS中调试
查看>>
SDUTOJ3754_黑白棋(纯模拟)
查看>>
Scala入门(1)Linux下Scala(2.12.1)安装
查看>>
如何改善下面的代码 领导说了很耗资源
查看>>
Quartus II 中常见Warning 原因及解决方法
查看>>