C指针-const char* p到底是什么不可以改变
2015-08-30 20:38
274 查看
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。
相关文章推荐
- [网络转载 ]LoadRunner技巧之THML与URL两种录制模式分析
- UVA 1452 八 Jump
- 如何创建一个随机数组(元素是1到N-1,不重复)
- 链表分割
- 处理 CALayer 变形后的抗锯齿问题
- UVA 11795 七 Mega Man's Mission
- shell打印杨辉三角
- Unity3D有限状态机(FSM)学习笔记【4】FiniteStateMachine类
- 判断两个圆柱体是否相交
- 分支结构练习-4.登录系统
- UVA 1456 六 Cellular Network
- Visual Studio 2010 error C2065: '_In_opt_z_' : undeclared identifier 编译错误
- 从迷茫到清晰,先被别人领,再被自己领——记8月英语
- 2015—年度总结
- iOS学习总结之UI框架UIWindow和UIView(附带计时器学习)
- 分支结构练习-3.switch结构判断成绩
- 文件描述符
- UVA 11404 五 Palindromic Subsequence
- UVA 11552 四 Fewest Flops
- Composer 笔记(PHPconf 台湾)