c语言问题,求详细解释!!尤其是*(t--)=*(t-1)
2个回答
展开全部
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’的地址,相当于数组中字符比输入字符的二进制小的后移,当遇到比他大时插入输入值。
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'
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询