c语言问题,求详细解释!!尤其是*(t--)=*(t-1)

 我来答
草丛里的落叶
2015-01-09 · TA获得超过422个赞
知道小有建树答主
回答量:650
采纳率:100%
帮助的人:313万
展开全部
f(char*t,char ch)//指针t指向数组s的首地址,指向值字符9
while(*(t++)!='\0');//指针后移,指向数组'/0'的位置
*(t-1) //地址回退一,指向字符1的地址
*(t--)=*(t-1);//把 t 指向t-1的地址,t的值为字符‘1’,然后t--;指向t-1的地址,也就是字符‘1’的地址,相当于数组中字符比输入字符的二进制小的后移,当遇到比他大时插入输入值。
追问
为什么t的值为字符一?
追答
t岗开始是指向‘\0',它的值不是字符1,t-1才是指向字符1的地址,t-1的值才是字符‘1’;t就相当于字符‘1’的地址往后加了1,相当于一个分配出来的闲地址,用来接收前一个地址上的值,这样就有两个地址都保存了字符‘1’,相当于备份了,然后一步步后移(3移到1的地址上,5移到3 的地址上,这是‘6’<'7';循环结束,最后执行*(t--)=ch;就是‘5’的地址接收ch(输入值);
按道理来说while(*(t++)!='\0');执行这一句后,t指向的是该字符串后的一个空地址(是连续的),t-1指向的地址就是‘\0'; 97531'\0' 空,执行*(t--)=*(t-1);后,97531‘\0''\0',再执行*(t--)=*(t-1);后:975311'\0'如此下去975331'\0' ,975531'\0' ,976531'\0'
百度网友9761bdf1d
2015-01-09 · TA获得超过589个赞
知道小有建树答主
回答量:441
采纳率:0%
帮助的人:355万
展开全部
输出结果应该是字符串"976531",即将6插入合适的位置,保持原来的逆序。函数中第一个循环,定位指针t到字符串的空白字符之后;第二个循环,将小于6的元素后移。
追问
那*(t--)=*(t-1)不是同一个意思么,求解释
追答
*(t-1)是指针所指元素的前一个元素的值,它赋值给*t,即前一个元素赋值给当前元素,然后t自减,即t再前移一个单元。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式