中易网

为什么C语言里 char c;c="rfg";这样编译都可以通过?字符串常量赋给字符常量明显错误嘛

答案:4  悬赏:60  
解决时间 2021-03-21 19:55
打错了,符串常量赋给字符变量明显错误嘛,为什么C语言里 char c;c="rfg";这样编译都可以通过?
最佳答案
编译能通过,但是会警告,警告内容如下:
warning: assignment makes integer from pointer without a cast
说明类型不匹配

我来解释下为啥:
char c;
说明c只占一个字节的存储单元,可以对c直接赋值,如:
c=200;

c='k';
都是可以的
至于"rfg",虽说是一个字符串,但是字符串本身代表的是该字符串的首地址。
之所以说类型不匹配,是char型和地址类型不是相同的类型,所以会有以上的警告,如果改成如下,则警告也会消除:
c=(int)"rfg";
把字符串的首地址这个值通过强制的类型转换,转换为int型的值。
注解:这个说法我亲自敲代码并编译过,请相信!
全部回答
c是变量 再看看别人怎么说的。
不止编译能通过,而且可以运行。 这样赋值一般去最后一个字符,也就是g存入 变量c里面。 具体与编译器的实现有关,最可能的解释是隐式转换,字符串常量在拷贝给临时对象的时候, 一次读取每个字符,\0前面的字符是最后一次覆盖,所以值是g。
因为"rfg"在c语言里是字符串常量的首地址,因此它实际上是个整数,而char实际上是个unsigned short。 因此,c="rfg",实际上是把首地址这个整数转换成char然后赋值给c。 所以不但编译能通过,而且还可以运行,但结果就不是你想要的了。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
定,组成四字成语
维生素b吃多了会导致乳头发黑吗?
我儿子已通过空乘招聘,还有政审没审,我因为
实况足球2012大师联赛金钱、转会都是什么? 有
凤阳迎宾快捷宾馆地址在什么地方,我要处理点
西北金行,铂金PT950钻戒,32分,H,VVS,总质
中国建设银行atm(新东街48)地址在什么地方,
唱吧麦颂KTV(新华名门天街店)地址在哪,我要
去红胎记最好的方法
之前通过微信客服反馈了一个关于微信零钱清空
美团骑手怎么投诉公司
福建省哪里有学做凉拌菜的
山东怎么样查车辆违章查询
招商银行临额到期进入到最近一期账单还款,还
如何看待高晓松炮轰梁植愧对清华教育
推荐资讯
西安联通宽带覆盖的小区有哪些
民间传说,正月头腊月尾打烂东西不好?会怎么
一个人如何两年能挣一百万?销售什么最挣钱?
沈阳兴顺街九路到铁西区教育局
2.485保留2位小数怎么做?
番薯土豆芋头,三种可一起煮吗?
小潘汽修装潢部在什么地方啊,我要过去处理事
足球赛交换场地是什么意思?
李敏镐鼻子整容是不是真的呢?
汉中有中山证券交易所吗
钢结构GKZ1是什么意思
求韩剧夜行书生高清中字全集,给链接或者发到
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?