
如果else有括号,就看括号是哪个if就跟哪个If。如果没有括号,就跟最近的if
这里的else没有括号,应该是if(!c)的else。
所以d之外开始的时候赋值了20,其他的分支条件都没进。结果应该是20
这个程序有BUG,执行时极可能报告段错误(segmentation fault)。
错误原因在于:指针p没有初始化。
---
如果:char s[] = "123456789", *p, i = 0
改为:char s[] = "123456789", *p = s, i = 0
那么:程序输出结果为:*2*4*6*8*
原因:
当i = 0,2,4,6,8时,if条件i%2 == 0为真,故执行*p=‘*’,即修改数组s的第0,2,4,6,8个元素值为‘*’,亦即将1、3、5、7、9修改为*。
程序第一个if中的条件!a是成立的(定义了a=0,非0为true),所以执行第一个if中的语句,d++,接着直接就执行printf()语句,所以结果是101。
如果调试程序,可参考如下:
(1)执行到第一条if语句
(2)匹配第一条if语句,执行完后,执行printf()语句输出结果
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)