C语言 自加赋值语句问题

发布时间:2024-05-15 16:30 发布:上海旅游网

问题描述:

while((*to++=*from++)!='\0')
{……}
//from,to是字符指针变量//
具体执行过程是什么?
联系结合性说说是为什么过程是这样?
自加运算符 应该是遇到分号或整句都执行完才自加吧
这样是不是应该先判断(*to是否='\0')后自加?
看了几位朋友的答案真是晕了,到底是先判断还是先自加啊
再加30分,请朋友们赐教
我又考虑到一点,是不是先判断,再执行下面大括号里的语句,最后自加啊?

问题解答:

while((*to++=*from++)!='\0')中++是相对本句话,
*to++=*from++就是++所在的语句,所以先运行这句话,然后++,
然后在判断(*to++=*from++)!='\0',也就是把*from赋给*to,然后判断是否等于0的ASCII码
对于这种题,主要记住++是相对本句话,所以i++;和++i;是一样的,运行起来没区别,只有++处于复杂语句中时才需要分辨运行顺序
写程序时如果对++和--语句的运行顺序把握不好,可以合理运用括号

结合性相当于while((*(to++)=*(from++))!='\0')
执行过程就是把from指向的字符付给to指向的字符,之后判断循环条件:to指向的字符是否为'\0'('\0'表示字符串结尾),最后to和from指针都加1(指向下一个字符)

对对对,应该是先判断,后自加~

while((*to++=*from++)!='\0')
等价于
while((*to=*from)!='\0'){
*to++;
*from++;
}

我刚学C 语言,这好像是红色教科书的赋值语句改写那里的内容吧。
执行过程:1.*from赋值到*to
2.指针变量from跟to都加1(指向下一个位置)
3.判断*to是否等于‘\0’
4.执行循环体

这个……你确定写的是对的么?
如果没写错应该先计算*to++=*from,
再判断(*to是否='\0'),
最后*from++。

后自增操作符优先级最高~ 其次是*解引用操作符~ 赋值操作符=优先级最低~
我分步给你解释:
1.有(),先运算();
2.有*与++ ,还有 =赋值。先运行++, 再运行*, 最后赋值(to 与 from 运行的先后次序看编译器而定)
3.即为*(to++)=*(from++)
to++操作详解: 1.把to当前地址返回,2.++to;
所以 to++ 运算结束后,to本身已经加了1。 然后才进行的*操作~
所以是先自加,后判断这个!='\0',当然判断时判断的是自加前的from指向的东西~

热点新闻