为什么不能将const指针赋给非const指针,而能反过来弄

 我来答
sunchy12345678
推荐于2017-10-01 · TA获得超过665个赞
知道小有建树答主
回答量:443
采纳率:100%
帮助的人:352万
展开全部

防止你误操作嘛。。。

const修饰的对象不能进行写操作,如果你可以直接赋值不就能修改那个对象的值了嘛。。。

但是可以进行类型转换。。。

const int i = 0;
int* p = (int*)&i;

这样就没问题了,但是不推荐。理由同上。

其实C的类型限制很薄弱的。。

比如以下代码没有类型转换却也没有错误。

const int i = 0;
const int** pp;
int* p;
pp = &p;
*pp = &i;
*p = 1;

琢磨一下,就会发现以上代码是没有问题的。

所以使用的时候需要谨慎,以防不小心违背了const的意愿。

好了扯淡完毕。

嗯泪书味幻光1R
2013-08-08
知道答主
回答量:18
采纳率:0%
帮助的人:9.6万
展开全部
const 指针表示 所指向内容不能改变,假如你赋值给了一个非const指针,即一个值对应了2个指针,你可以通过操控非cons指针去改变值,这样就矛盾了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
京雨000
2020-04-12
知道答主
回答量:4
采纳率:0%
帮助的人:2445
展开全部
在ANSI C中有关简单赋值有这样一段话,位于第6.3.16.1节,有下列约束条件
要使上述赋值形式合法,必须满足下列条件之一:
两个操作数都是指向有限定符或无限定符的相容类型的指针,左边指针所指向的类型必须具有右边指针所指向类型的全部限定符。
有两点要注意1,相容类型 2,右边有的左边也要有
char *cp;
const char *cpp;
cpp=cp;
左操作数是一个指向有const 限定符的char类型的指针。
右操作数是一个指向没有限定符的char类型的指针。
两个都是char类型,相容,左操作有限定符const,右操作无限定符。所以,左操作所指向的类型具有右操作的所指向类型的全部限定符。故可以赋值。
反过来
cp=cpp;
左操作无限定符,右操作有,不满足条件——左边指针所指向的类型必须具有右边指针所指向类型的全部限定符。所以不可以赋值。
当然从const的性质可知,const char *cpp 意味着 *cpp不能被修改,也就是指向的值不可被修改,而如果可以有一个指针能指向这个值,而我们又可以通过指针去改变它的值,这就违背了const 的性质。所以下面语句可以赋值。
const char *cp;
const char **cpp;
cpp=cp;
cp=cpp;
更多的
char **cp; 类型是”指向char类型的指针的指针
const char **cpp; 类型是“指向有const限定符的char类型的指针的指针“
它们指向的类型就已经不同。前者指向char *后者指向const char *,所以它们是不相容的。
cpp=cp;
cp=cpp;
两个都不可以。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sun_kang110
2013-08-08
知道答主
回答量:46
采纳率:0%
帮助的人:18.7万
展开全部
const作为一个标记,标记它所定义的变量为常量,试图将常量修改为非常量,编译器会报错,这是编译检查,反过来肯定是没有问题的了,在C语言中可以通过指针强制将常量改变,
const int i = 2;
char * p = &i;
*p = 3;
这时i = 3;你去试试,很久没用了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式