char** 和 const char** 的区别

chinahuangbin 2009-09-15 05:35:06

char *p1;
const char *p2 = p1; //正确
char **p3;
const char** p4 = p3; //错误


为什么const char** p4 = p3 会有错误呢?
谢谢各位!
...全文
140 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
chinahuangbin 2009-09-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 supermegaboy 的回复:]
const char** p4 = p3的错误来自于两个原因:
[/Quote]
谢谢热心的回复
此const不是彼const 点中要害

另外例子当中是 p1=&p2 出错了 好像还没有理解你例子要表达的意思 慢慢消化吧。。。
再次感谢 也谢谢其它回复!!!
飞天御剑流 2009-09-15
  • 打赏
  • 举报
回复
const char** p4 = p3的错误来自于两个原因:

一、p3和p4两个指针类型不相容,p4指向一个指针,这个指针的类型是const char*,而p3指向的指针的类型则是char *,两个指针的类型不相同,就是说p3和p4指向的对象的类型不相同,因此p3和p4不相容。

到这里有人就会说了,p1和p2不也只是相差了一个const么?但此const不是彼const,p1和p2都指向int对象,只不过其中一个对象是const的,但p3和p4指向的都不是const对象,而是指向的指针对象的类型不相同。

p4跟谁想容呢?p4这样定义的话,两者就想容了:

char * const *p4 = p3;


二、如果允许p4与p3相容的话,就可能发生const对象被修改的现象,我举个例:

const int i=10;
const int **p1;
int *p2;
p1 = &p2;
*p1 = &i; /*假设这个合法*/
*p2 = 20;


如果允许p4与p3相容,那么上述i就会被修改了。
kouwenlong 2009-09-15
  • 打赏
  • 举报
回复
差不多吧.
chinahuangbin 2009-09-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 mstlq 的回复:]
char **p3;
    char* const* p4 = p3;
[/Quote]
在这里的p4如何解释?
我知道p3是一个二级指针 然后一级指针指向一个 char 型
const char** p4 = p3 中 p4 也是一个二级指针 然后一级指针指向一个 const char 型
这样理解对不?
kouwenlong 2009-09-15
  • 打赏
  • 举报
回复
C++允许char*到const char*的转换(这是安全的)。但如果想要将char**隐式转换成const char**则会报错.
chinahuangbin 2009-09-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 kouwenlong 的回复:]
const char** p4 = p3;
这里你定义的P4是const的,而p3 不是const,所以回报错.
[/Quote]
可不可以介绍的详细些。。。
mstlq 2009-09-15
  • 打赏
  • 举报
回复
char **p3;
char* const* p4 = p3;
dclchj 2009-09-15
  • 打赏
  • 举报
回复
看到这么复杂的数据就躲~~
kouwenlong 2009-09-15
  • 打赏
  • 举报
回复
仔细看了下题,发现上面的那个解释还可以.
现在不明白
char *p1;
const char *p2 = p1; 这个为什么了.
kouwenlong 2009-09-15
  • 打赏
  • 举报
回复
const char** p4 = p3;
这里你定义的P4是const的,而p3 不是const,所以回报错.

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧