char**为何无法转为const char**?——对const的进一步探讨
来源:互联网 发布:证件照排版软件 编辑:程序博客网 时间:2024/04/27 18:17
在CSDN上的论坛中,我已经发表过两篇关于const的用法以及修饰方式。这里想更深入地探究const的本质问题。
我们都这么用过:
char a = 0;
const char *p = &a;
const char *p = &a;
也就是说char*可以转为const char*。这个是合法的,因为const char*意味着该指针变量指向char类型变量的地址,任何通过p来指向变量a地址的指针变量只能用const*来修饰,也就是说,它们无法对a的值进行修改。
下面来解释一下为什么char**无法转为const char**。下面以C99标准规格说明书中的一个样例作为例子说明:
const char **cpp;
char *p;
const char c = 'A';
cpp = &p; // constraint violation
*cpp = &c; // valid
*p = 0; // valid
char *p;
const char c = 'A';
cpp = &p; // constraint violation
*cpp = &c; // valid
*p = 0; // valid
从上面代码中我们可以看出,一开始p处于悬挂状态,它是char*类型的指针变量。然后cpp指向p的地址,然后通过*cpp = &c的操作将指针p的值赋为常量c的地址。这样,做最后一个语句后,即*p=0,常量c的值就会变为0。这样就间接地修改常量c的值。
如果将const char** cpp改为const char * const *cpp;的话就可以安全地指向p的地址了。因为此时,cpp无法通过使用*cpp = &c来修改p的值,因为此时cpp的类型中char*类型被const修饰了。
C/C++标准所指定的规则还是非常可靠的。
- char**为何无法转为const char**?——对const的进一步探讨
- CString转为const char *
- CString 转为 const char*
- const char *|char const char * 与char * const 的区别
- const char & char const
- const char* char*const
- char ** a; const char ** b; char * const * c; const char * const * d; const char * const * const e;对
- const char*,char *const,const char*const
- const char*,char *const,const char*const
- const char*, char const*, char *const 的区别
- const char*, char const*, char*const的区别
- const char*, char const* and char *const 的区别
- const char*, char const* and char *const 的区别
- const char*, char const*, char*const的区别
- const char*, char const*, char*const的区别
- const char*, char const*, char*const的区别
- const char *,char const *,char * const的区别
- const char*, char const*, char*const的区别
- DIV CSS网页布局实例:十步学会用CSS建站
- asp.net小偷程序示例
- UI界面设计闪烁问题的解决办法
- 一个microsoft的.exe程序文件的启动过程
- Java-InnerClass-01
- char**为何无法转为const char**?——对const的进一步探讨
- ugg5819羊毛靴,ugg三木扣羊毛线靴批发
- 脚踏实地,一步一个脚印
- 你是我生命的一首歌
- 一些常用JS脚本
- 用OpenInventor实现的NeHe OpenGL教程-第二十三课
- 论谢文创业的几点启示
- Java-InnerClass-02
- 阿里巴巴股票缘何大跌?