#include <stdio.h> main() {char s[]="134567890",*p=s+3; int i=5;

printf("%d,%s\n",--i,p++);printf("%s\n",p-i);输出结果为______________求详细过程谢谢!!... printf("%d,%s\n",--i,p++); printf("%s\n",p-i); 输出结果为_______ _______ 求详细过程谢谢!! 展开
 我来答
sh1o2os
2013-04-10
知道答主
回答量:14
采纳率:100%
帮助的人:14.5万
展开全部
题目中的s[]="134567890",怀疑是楼主写错了,少了个2,但是还是以此处写的为准。

printf中的逗号表达式,是先算后面的p++,然后再计算--i,
1,p++:
s本身就是“1234567890”字符串的首地址,而且是char类型的,p也是char类型的,p = s + 3,那么p就是字符‘5’的地址,此时p++,++在后面,应该是先用值(即p还是'5'的地址)再加,此时%s输出到'\0'(‘\0’是在1234567890字符串的末尾地址处)为止,输出567890,用完p之后,将p的值加1,此时p指向的就是'6'的地址。
2,--i
--在前面,应该是先减(即i = i - 1,i就等于4)再用值,再拿去printf输出,输出4。
故第一句执行后输出4,567890。结果i = 4, p指向'6'的地址。
3,p-i
p-i即p-4,意思就是从p指向的地址向前移4个char(因为是char类型),则p-i指向的地址就为‘1’地址了,%s输出则为:134567890。
当然我没有运行过,你最好先运行下结果看对不对。结果:
4,567890 134567890
追问
抱歉确实少打个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

懂了没有?不懂的话就另请高明了吧,的确打字不好打呀,切换来切换去的。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式