C语言基础问题,高手进

ying_seven 2012-02-28 09:42:53


const char ** p;
char ** pp;
p = pp;

如果是这样 编译器就会发一条警告
而下面的就不会


char *cp;
const char *ccp;
cpp = cp;

这个为什么可以呢?
按理说cp 指向的是 一个char类型
而ccp指向的是const char 类型
两个类型不应该相容啊
这也是为什么第一段代码 会报警告
我不明白为什么第二段代码可以无警报编译

编译器 是gcc

...全文
139 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
ProgrammingRing 2012-02-28
  • 打赏
  • 举报
回复
C专家编程19页……
ying_seven 2012-02-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 mko_y 的回复:]
const 的意思就是 固定的,不变的
你修改了它的值,系统就报误了。
[/Quote]
我是限定了指针指向的内容为const 而不是限定了指针..
ying_seven 2012-02-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 flowingfirefly 的回复:]
引用楼主 ying_seven 的回复:
C/C++ code

const char ** p;
char ** pp;
p = pp;



const <==> read-only, 但是pp是一个变量,要把一个变量写入一个read-only的单元,能不出错吗?
[/Quote]

那第一段代码 不也是把一个变量写入一个人read-noly单元么 为什么可以 无错
ying_seven 2012-02-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 mingliang1212 的回复:]
只规定可以从
T* 转换成 const T*


但是下面:
const char ** p; //T1 = char char *
char ** pp; //T2 = char*
p = pp;
T1 != T2时,没有 T2 * 到 T1*的转换.
[/Quote]
为什么T2 = char*啊?
这个没看懂
flowingfirefly 2012-02-28
  • 打赏
  • 举报
回复
[Quote=引用楼主 ying_seven 的回复:]
C/C++ code

const char ** p;
char ** pp;
p = pp;

[/Quote]

const <==> read-only, 但是pp是一个变量,要把一个变量写入一个read-only的单元,能不出错吗?
ying_seven 2012-02-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 nice_cxf 的回复:]
const char*是一个不能被修改的指针,因此从普通指针转过来是没问题的
而char*是普通指针,是可以修改的,如果你用char*修改了值,实际上相当于修改了const char*的值,因此变的不安全,所以系统会给警告
[/Quote]
你这里的const char *中的const 是限定指针不能修改还是 指针指向的内容不能被修改呢?
应该是指针指向的内容吧
如果要指针不能被修改 应该是
char * const cp
这样吧
iamnobody 2012-02-28
  • 打赏
  • 举报
回复
只规定可以从
T* 转换成 const T*


但是下面:
const char ** p; //T1 = char char *
char ** pp; //T2 = char*
p = pp;
T1 != T2时,没有 T2 * 到 T1*的转换.

qwer_boo 2012-02-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 nice_cxf 的回复:]

const char*是一个不能被修改的指针,因此从普通指针转过来是没问题的
而char*是普通指针,是可以修改的,如果你用char*修改了值,实际上相当于修改了const char*的值,因此变的不安全,所以系统会给警告
[/Quote]++
k841366951 2012-02-28
  • 打赏
  • 举报
回复
你定义了指针后赋初值了吗???
mko_y 2012-02-28
  • 打赏
  • 举报
回复
const 的意思就是 固定的,不变的
你修改了它的值,系统就报误了。
nice_cxf 2012-02-28
  • 打赏
  • 举报
回复
const char*是一个不能被修改的指针,因此从普通指针转过来是没问题的
而char*是普通指针,是可以修改的,如果你用char*修改了值,实际上相当于修改了const char*的值,因此变的不安全,所以系统会给警告
ying_seven 2012-02-28
  • 打赏
  • 举报
回复
明白了... 结贴!~ 谢谢大家
qixing1115 2012-02-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 qwer_boo 的回复:]
引用 1 楼 nice_cxf 的回复:

const char*是一个不能被修改的指针,因此从普通指针转过来是没问题的
而char*是普通指针,是可以修改的,如果你用char*修改了值,实际上相当于修改了const char*的值,因此变的不安全,所以系统会给警告
++
[/Quote]
+++
Xomic 2012-02-28
  • 打赏
  • 举报
回复
比较比较 const char *p char *const p 就知道了!

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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