简单的C语言问题,看看谁的回答既简洁又准确

polluxzy   2010-11-22 14:20 楼主

----------------------------------------------------
程序中有一条语句如下:
ch[ths-2]=0;

其中ch[]; 为一个unsigned char 数组, ths: 为一个unsigned char 格式数据.
如果ths等于1, 则ths-2 就是-1. 如果出现了-1 程序会出现什么现象, 会不会程序混乱?
-----------------------------------------------------

回复评论 (5)

这个问题没有标准答案,看你在什么编译环境下了,有的编译环境中“ch[ths-2]”这种表达式都不能通过;
如果检查机制不严格的话,这种表达也不会有什么大碍,只不过可能出现你没有想到的结果,会把-1强制转换为uchar类型,丢掉最高位的符号位,这就要看你定义的这个数组的大小了,定义小了的话,就要崩溃了,仅仅个人的理解。
点赞  2010-11-23 18:08
1、编译可能通不过。
2、C不做数组边界检查,如果你想程序混乱的话,它就会混乱。
点赞  2010-11-24 10:38
iar编译能通过吧
就是内存乱掉,运气好的话没啥问题
点赞  2010-11-24 14:21

程序会跑飞的

会出现异常错误
点赞  2011-4-1 13:27
ch[-1]相当于数组ch[]上一个地址的值(假设地址可用),如果给ch[-1]赋值的话,会影响上一个地址空间所存储的值,如果是程序空间的话,程序很有可能会跑飞。
点赞  2011-4-2 15:06
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复