C语言简单问题,请回答下,谢谢

来源:百度知道 编辑:UC知道 时间:2024/06/27 22:44:19
while(*to++=*from++);是怎样结束的,谢谢了!

这个很简单,这条语句这不过是想实现字符串复制,我帮你一点一点分析
我们先来用最笨的方法来实现:from指针指向源数组起始,to 指针指向目标数组起始
while(*from!='\0')
{
*to++=*from++;
}
*to='\0';
这样写很好理解吧?
OK,在进一步
我们知道:'\0'是空字符,其对应的ASCII值是0,在C语言中我们知道,字符型和整形是相通的,那么循环入口我们可以这样写
while(*from!=0)
{...}
对吧?在进一步:
while(*from)
{..}
到现在,与你给出的表达式已经很接近了
其实在进一步就写成你给出的表达式了
while(*to++=*from++);
它的过程其实这样的:
将from指向的数组中的元素一个一个赋给to指向的数组,然后就要判断刚刚赋给to的字符的ASCII值是否大于零,只有当把from中的'\0'赋给to后,这时检测到to的值已经不满足循环条件了,于是就退出循环
整个流程结束!
不知道你注意到了没,用while(*to++=*from++);实现字符串复制不用在最后把'\0'赋给to!!
想想是为什么,这个问题留给你!

当from指向字符串结束符时,++后缀是先取*from的值赋给*to,然后判断*to是否为0,再是from和to加1.这时候*to的取值是\0,结束循环.

可以说,只有*from的值为0才会结束.因为递增属于后加,所以先打0赋给*to后才加一,赋给*to++后,to也是后加,所以to为0,
还有,你这循环可以说是不对的,至少没人和你这样做,你是不是漏了个等号,你最好是把全部的代码贴出来,我们才比较好看.

可以看出这是个字符串的复制问题,等到from取到'\0'后就可以退出,
但是这个循环条件是个不合理的条件

而一个赋