printf("%d,%s\n",--i,p++); printf("%s\n",p-i); 输出结果为_______ _______ 求详细过程谢谢!!
抱歉确实少打个2 答案没错可是我还不太明白 可以麻烦你把2加进去再讲一下吗谢谢 尤其就是P那个从0/那里就不太懂了 这块我确实不太好
追答my god,还没有懂?我一直以为自己都可以当老师的呢。唉,你说呢,你追问的问题说得也不清楚。到底从哪里就不懂了我也不知道,我都没有说过什么0/,我只说过‘\0’吧?好吧,我再复制一遍,加个2。
printf中的逗号表达式,逗号表达式是先算后面的p++,然后再计算--i,
再比如逗号表达式:
a = i++, b = j--, c = k+2;
上面的逗号表达式是先算 c = k+2,再算 b = j--,最后再a = i++。所以这里一样的,先p++,再--i。
1,p++:
s[]="1234567890",s就是“1234567890”字符串的首地址,也就是s是指向字符‘1’的地址,现在p = s + 3,就是p从‘1’的地址加3,到了字符‘4’的地址,printf函数调用时,p++,因为++在p后面,应该是先用值(即p还是'4'的地址,拿去给printf函数用,就是拿去输出)再加(即再p地址加1指向字符‘5’),此时%s输出(记住输出时p的值还没有加,还是字符‘4’的地址,都说先用再加嘛),一直到'\0'为止(‘\0’是系统为“1234567890”字符串自动加上的,就是第一个字节为‘1’,第二个字节为‘2’,......第10个字节为‘0’,第十一个字节为‘\0’,至于为什么,你就要去谷歌查查,就是为了给字符串给个结束符吧),所以就输出4567890,用完p之后,将p的值加1,此时p指向的就是'5'的地址。
2,--i
--在前面,应该是先减(即i = i - 1,i就等于4)再用值,再拿去printf用(输出),输出4。
故第一句执行后输出4,4567890。结果i = 4, p指向'5'的地址。
3,p-i
p-i即p-4,意思就是从p指向的地址向前移4个char型,p指向的是‘5’的地址,减4,则p-i指向的地址就为‘1’地址了,%s输出到‘\0’为止,则为:1234567890。
当然我没有运行过,你最好先运行下结果看对不对。结果:
4,4567890 1234567890
懂了没有?不懂的话就另请高明了吧,的确打字不好打呀,切换来切换去的。