问个自增/自减与赋值运算符优先级关系的问题
发表于 : 2010-11-05 12:02
先来段代码:
[/color][/b]
啥时候我也写的出这么漂亮的代码额
我看到的关于while (*s++ = *t++)一句大家比较认可的解释是:
最后弱弱地说一句:我是小菜……
代码: 全选
void strcpy(char *s,char *t)
{
while (*s++ = *t++)
;
}
啥时候我也写的出这么漂亮的代码额

我看到的关于while (*s++ = *t++)一句大家比较认可的解释是:
我扩充一下,不知道对不对:(1)*t 的赋值给 *s
(2)判断 *s 是否为真。如果为假,则跳出循环;否则继续执行第(3)步。因为字符串是以\0结尾的,遇到\0的时候,也就是*s为假,就跳出了字符串拷贝。
(3)s 和 t 加 1,指向下一个地址,准备拷贝下一个字符。
我的问题是:(1) 取t和s的值t'和s'到内存的某个位置;
(2) 取出*t' 和*s';
(3) *t' 的赋值给 *s';
(4) 判断 *s' 是否为真。如果为假,则跳出循环,否则继续执行(5)步;
(5) s 和 t 加 1。
是这样的吗?如果不是,为什么?1. 根据运算符优先级,后自增运算符的优先级比赋值高,所以顺序是(1)(2)(5)(3)(4);
2. 根据运算符优先级,后自增运算符的优先级比提领(*)高,所以取出t' 和s' 后应该先对t和s进行自增,然后在取*t' 和*s',
所以正确的顺序应该是(1)(5)(2)(3)(4)。
最后弱弱地说一句:我是小菜……
