
如果else有括号,就看括号是哪个if就跟哪个If。如果没有括号,就跟最近的if
这里的else没有括号,应该是if(!c)的else。
所以d之外开始的时候赋值了20,其他的分支条件都没进。结果应该是20
因为narr[0]]的地址为0012FF08所以 narr[1]的地址为0012FF0C
narr[2]的地址为0012FF10
narr[3]的地址为0012FF14
p的初始值为narr的首地址, 即0012FF08
&p[2]即narr[2]的地址0012FF10 该地址存放的值为63
之后p进行了自减
则此时p的地址为0012FF08 - 4 为0012FF04
&p[4] 为原来narr[3]的地址, 即 narr[3]的地址为0012FF14,
narr[3]的值是100
这个程序有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修改为*。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)