这次安徽省C语言二级考试中出现如图的赋值,编译器报错,但是要输出也可以输出。为什么?
这么说吧,无论什么类型的指针其实本质上是一样的,都是保存了一个8个字节的地址值(32位机是4个字节,其实就是2^32=4字节,2^64=8字节)。所谓指针分类型是需要告诉系统,在进行指针运算时应该采取哪种策略,比方ptr++,如果是int型就是向后偏移4个字节,如果是一个类类型其大小为100个字节,那么就是向后偏移100个字节。你这个用int型的ptr指向char型的问题在于,char型是一个字节,而int型是4个字节,*ptr的值是4个char型字符组合起来共同组成的int型值。编译是可以能的过的,但可能会出现越界的情况,这是我们极不想看到的。
C对类型转换之间的检测没有C++那么要求严格,所以就给个警告。只要自己知道在做什么程序就还可能得到需要的结果。
还有,你报错是因为sizeof写错了。
这是出现在等级考试中的错误,咋办?
<imgsrc="http://static.oschina.net/uploads/space/2016/0109/110635_cHol_2445688.png"alt="">
你这个考的是int类型是2个字节。char是1个字节。还有指针的用法。
提示出错,你就改正确吧。
首先C语言是弱类型语言,
其次,printf(p)在这里与printf("%s",p)等效,,,所以输出的还是字符串,
printf("%d",*p);
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。