C语言死循环,“贪心法”

死循环问题实例
int i;
int a[N];
for(i = 0; i<=N; i++)
{
a[i] = 0;
}
根据编译软件的不同,这段代码出现的问题也有不同,一般如果出现错误,原因如下:
以上这段代码,编译器给变量分配内存时变量i的内存会在数组a[N]的后边,循环内给数组内的变量赋值是从前往后写入地址的,当i=N时已经写到编译器给i分配的那块地址上了,循环有又将这块地址上的值写为了0,所以循环又重新开始了。就是一个死循环。(N是数组大小,但是i是从0开始的所以数组最后一个值应该是a[N-1])。
如果定义变量时将int i写在int a[N]后是不是就可以解决这个问题呢?
是的,但是在给数组内的变量赋值时就会循环4次,多了一次,这样原来申请的内存就不够了,编译就会出错。

词法分析中的“贪心法”:
每一个符号应该包含尽可能多的字符。如果输入流截止某个字符之前都已经被分解为一个个符号,那么下一个符号将包括从该字符之后可能组成一个符号的最长字符串。字符与字符之间的分隔是空格符、制表符和换行。
举个例子 :if,先把i当作一个变量,然后把i和后面的字符f放在一起发现if是一个有意义的关键词,那他就不会把i当作一个变量。如果i后面是一个/或者换行符或者空格等,那么就把i当作一个变量。
如果分析y=x/*p,你可能想表达的意思是把x除以指针p指向的值赋值给y,但分析时发现x/没有意义所以x是一个变量 /*是注释的意思,所以就会把/*放在一起,p就成了注释的内容,达不到你预期的目的。
参考:字节课《C陷阱与缺陷》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值