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

printf("%d,%s\n",--i,p++); printf("%s\n",p-i); 输出结果为_______ _______ 求详细过程谢谢!!

题目中的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

懂了没有?不懂的话就另请高明了吧,的确打字不好打呀,切换来切换去的。

温馨提示:内容为网友见解,仅供参考
无其他回答

Warning: Invalid argument supplied for foreach() in /www/wwwroot/aolonic.com/skin/templets/default/contents.html on line 45
相似回答